扑克牌益智口算游戏软件的设计与实现

2018-06-02 08:50赵晴马致明
电脑知识与技术 2018年10期
关键词:扑克牌口算游戏

赵晴 马致明

摘要:益智游戏是广大学生家长比较喜欢的,同时也是经实践证明了的对小孩子的智力能力发育有很好的引导促进作用。口算是后期复杂数学运算的基础,在小学阶段熟练掌握口算运算对以后的计算方面的学习有很好的促进作用,利用小孩子喜欢的扑克牌形式结合四则运算作为游戏规则,进行游戏对垒,可以很好地达到寓教于乐的目的。利用asp.net编程工具,结合C#程序语言进行算法设计,将扑克牌和口算二者结合起来,让小孩子在其感兴趣的领域的到口算的练习。文中介绍了有关的方法和技术,以供大家交流和研讨。

关键词:口算;游戏;扑克牌;asp.net;C#

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)10-0106-04

口算既是笔算、估算和简便计算的基础,又是计算能力的重要组成部分[1]。大量事实表明,基本口算熟练,笔算速度就快,正确率就高;反之,速度就慢,正确率就低。国家非常重视义务教育阶段学生的素养,并对学前教育阶段和小学教育阶段中的口算都有一定的要求[2]。《全日制义务教育数学课程标准》指出:“应重视口算,加强估算,提倡算法多样化”,并明确规定了各个学段口算应达到的目标[3]。

而且随着计算机的普及化,越来越多的小学生热衷于电脑游戏,往往放学回家后就趴在电脑前面或者选择英雄联盟、穿越火线等大型游戏,又或者选择消消乐等一些小游戏,归根结底都是因为网络上的游戏画面色彩丰富,或逼真或卡通,给小学生以无限吸引力。

这无疑耗费了小学生们的大量精力和时间,而且小学阶段是人一生中打基础最佳阶段,对以后的学习和发展有着极其重要的作用。

为了有效利用小学生这一阶段充满好奇心、吸收知识快、记忆力好等特点,让小学生可以在电脑上在游戏的过程中练习四则运算,本文拟计划开发一款以小孩喜爱的扑克牌为载体的在线益智口算游戏,让小学生在游戏中學习,这样既避免了独自学习的枯燥乏味性,有契合了小学生爱玩的天性[4]。

1 扑克牌益智口算游戏

爱玩是小孩的天性,扑克牌是小孩最喜爱的益智“玩具”之一。若能借助扑克牌的点数通过游戏方式对小孩进行口算训练,不失为一种寓教于乐的好方法。笔者通过实践,发现用这种方法对小孩进行口算训练非常有效,而且小孩也非常喜欢主动去玩。

扑克牌益智口算游戏根据不同年龄断的小孩的口算能力的不同设置了不同的游戏难度等级,主要分为单一的加法运算,加减混合运算以及加减乘除四则混合运算[5]。

玩家选择相应的游戏难度后,游戏直接跳转到游戏主界面,由玩家点击开始游戏按钮后,系统分别给玩家和电脑各5张牌,系统默认玩家先出牌,但先出牌一方需遵守初次出牌规则:先出牌一方可以出单张,也可以出一对(2张),还可以出炸弹或一条龙(3张)。如果对方手中扑克牌的点数经过相应的游戏规则刚好跟出的牌的点数一样多,就可以出牌挑战,另一方如果还有相同的点数也可以继续出,谁最后出的牌就可以赢得牌池中的这批牌作为积分累积。然后继续摸牌,以保持手中有5张扑克牌。赢牌的人总是先出牌,直到一副扑克牌摸完。最后游戏通过赢得的积分数多少来决定输赢!

一局游戏结束后,玩家可以选择重新开始,继续游戏该难度的对战,也可以选择不同难度的对战,进入另一难度进行游戏。

2 在线扑克牌益智口算游戏的设计

2.1游戏规则的设定

包括级别(初级:加、减单一运算,根据运算数的范围再划分档次;中级:加减混合运算;高级:四则运算)的划分、计分规则、胜负统计等。

游戏级别在初级、中级、高级的基础上再划分为5以内、10以内、K(13)以内共计三级九档的游戏级别。

游戏的积分规则按照一张扑克牌算一个积分进行统计,玩家和电脑轮番出牌,直到一方手中没有符合规则的牌可出,然后系统统计本轮双方共出多少张扑克牌,然后算作胜利一方的积分,胜方继续出牌,直到一方手中的扑克牌完全出完,本局结束。

当本局游戏结束后系统统计双方获得的积分,获得积分多的一方赢得本局胜利。

这款游戏对于不同的游戏难度采取不同的游戏规则。

初级游戏难度(5以内、10以内、K(13)以内的加法“+”):通过采用加法进行计算手中的扑克牌的点数是否和对方已出的扑克牌点数相等,若相等则可以继续出牌,直到一方手中没有符合要求的扑克牌时,本轮游戏结束,由胜利获得本轮积分并继续出牌,直到本局游戏结束。这个游戏难度适合刚刚开始学习简单加法的小学生进行循序渐进的游戏练习。

中级游戏难度(5以内、10以内、K(13)的加减混合运算“+、-”):该游戏难度通过采用加减混合运算的方法进行计算手中的扑克牌点数是否和对方已出的扑克牌点数相等若相等则可以继续出牌,直到一方手中没有符合要求的扑克牌时,本轮游戏结束,由胜利获得本轮积分并继续出牌,直到本局游戏结束。这个游戏难度适合已经掌握简单加法并开始学习加减法混合运算的小学生进行游戏练习。

高级游戏难度(5以内、10以内、K(13)的四则混合运算“+、-、*、/”):该游戏难度通过采用加减乘除四则混合运算的方法进行计算手中的扑克牌点数是否和对方已出的扑克牌点数相等若相等则可以继续出牌,直到一方手中没有符合要求的扑克牌时,本轮游戏结束,由胜利获得本轮积分并继续出牌,直到本局游戏结束。这个游戏难度适合已经学习加减乘除四则混合运算并掌握了九九乘法表的小学生进行分阶段的巩固练习。

游戏设置不同的游戏难度等级是为了适应小学生在不同数学运算阶段进行锻炼学习,让他们可以结合自己的实际掌握水平在游戏的过程中逐渐增强自己的口算能力,以期达到寓教于乐的目的。

2.2 开发平台的选择

经考虑分析采用asp.net编程工具,使用HTML5进行前端界面设计和C#程序语言进行算法设计。ASP.NET 是.NET FrameWork的一部分,是一项微软公司的技术,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术,它可以在通过HTTP请求文档时再在Web服务器上动态创建它们[6]。 指 Active Server Pages(动态服务器页面) ,运行于 IIS(Internet Information Server 服务,是Windows开发的Web服务器)之中的程序 。HTML是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分[7]。C#是微软公司发布的一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的运行于.NET Framework之上的高级程序设计语言[8]。利用C#编写语言结合asp.net开发平台开发者可以设计出可以直接在网页上完美运行的网页游戏。游戏成功发布后,用户可以直接在网上进行游戏体验,真正达到与游戏中提升自己的反应速度和口算能力。

2.3 游戲的流程设计

游戏流程主要有游戏难度选择、出牌、提示、不出、统计双方获得的积分、判断哪方胜利、重新开始等。

玩家进入游戏前需要先根据自己对口算的掌握程度,选择适合自己的游戏等级,然后进入游戏界面,在系统发牌完毕后,率先出牌。电脑判断是否有牌可出并出牌或不出。当玩家找不到可出的扑克牌组合时可以利用提示进行出牌,直到有一方不出,则本轮结束,有胜利的一方继续出牌,直到本局结束,系统统计双方获得的积分然后判断出获胜的一方。一局游戏对战结束后,玩家可以选择重新开始继续本难度等级的练习也可以选择其他难度等级进行游戏练习。

游戏的主要流程图如图1。

3 在线扑克牌益智口算游戏的开发

3.1 设计思路

本文选择中级难度等级(10以内)加减法混合运算进行游戏设计思路的解释。

10以内的加减法混合运算,主要是指玩家在选择改难度等级后,系统给玩家和电脑双方发牌的牌面大小为1到10以内的扑克牌,双方需要按照游戏规则把手中的扑克牌进行10以内的加、减以及加减混合运算进行游戏对战。

游戏具体流程图如图2。

玩家进入游戏难度等级选择界面后,选择中级游戏难度(10以内的加减混合运算“+、-”)。界面进入游戏主界面,玩家点击开始对战按钮;系统开始给游戏双方发牌,对垒双方人手5张10以内的扑克牌;

系统默认玩家先出牌,初次出牌须符合第一次出牌规则,即玩家可以出单张、对子(两张)、炸弹或一条龙(三张);玩家出牌后,电脑开始进行判断,如果手中的牌可以通过加减法混合运算后得到和玩家出的牌的和大小一样,则出牌成功,然后玩家出牌,当玩家不确定手中的牌是否有符合要求的组合时,可以点击提示按钮,系统给出提示或者直接给出“没有符合要求的牌”,这种情况下系统提示本轮电脑获胜并获得相应积分;反之则玩家获胜。

本游戏共设计3级9档游戏模式,除采用的运算方法有差异外在其他方面都采用和10以内的加减混合运算相同的模式,方便不同口算水平的小孩子进行游戏练习。

3.2游戏界面的设计

游戏界面主要分为游戏名称、制作单位、游戏难度等级选项以及游戏主界面。用户通过左侧列表选择相应的游戏难度,在游戏过程中电脑和用户的积分实时统计并显示,同时本轮游戏的点数也会显示出来以提醒用户。

3.3 发牌模块的设计

本设计将发牌过程设计为两个步骤,第一步系统生成随机数,随机数的大小和玩家选择的游戏难度等级相适应,根据随机数的大小对四种不同花色的扑克牌进行洗牌。第二步系统再次生成0到4的随机分别对应不同的花色,然后根据随机数的大小选择发牌的花色,如果该花色的牌组不为空,则把排在第一位的扑克牌发给玩家或电脑,直到双方都拥有5张扑克牌。

有关洗牌、发牌的部分代码如下:

private List ListRandom(List myList)

{

int index = 0;

int temp = 0;

for (int i = 0; i < myList.Count; i++)

{

index = GetRandom(myList.Count - 1);

if (index != i)

{

temp = myList[i];

myList[i] = myList[index];

myList[index] = temp;

}

}

return myList;

}

private void fapai()

{

//用户的牌

int ik = 0;

while (u.Count < 5)

{

if (ik > 5)

break;

ik++;

int i = paise();//调用paise()函数获取随机牌色标号

if (i == 0)

{

//结束

}

else if (i == 1)//表示获取第一种牌色的牌一张

{

int x = a.First();

u.Add("a" + x.ToString());

a.RemoveAt(0);

}

3.4 出牌模块的设计

以用户出牌为例,玩家首先选择要出的牌,选中后点击出牌按钮,然后系统进行判断。

protected void Button1_Click(object sender, EventArgs e)

{//出牌

tishi.Text = "";

Button3.Enabled = true;

List lt = new List();

List lt1 = new List();

int i = 0;

if (d1.Checked)

{

i++;

lt.Add(u[0]);

lt1.Add(int.Parse(u[0].TrimStart('a').TrimStart('b').TrimStart('c').TrimStart('d')));

d1.Checked = false;

}

如果玩家没有选择牌而点击了出牌,则系统提示玩家“请选择要出的牌”。

if (i == 0)

{

tishi.Text = "请选择要出的牌";

return;

}

对玩家选择要出的牌进行判断,如果玩家是首次出牌,则需要判断出牌是否符合首次出牌规则。

if (ci == 0)//出牌去牌數为0

{//首次出牌

if (lt1.Count != 1 && !chupaiguize.duizi(lt1) && !chupaiguize.shunzi(lt1) && !chupaiguize.zhadan(lt1))

{//不符合规则

tishi.Text = "出牌不合规则!";

return;

}

3.5 提示及胜负统计模块的设计

当玩家不知道该如何出牌时,点击提示按钮,系统给出符合运算规则的排列组合。玩家可依据提示进行选择出牌。

protected void Button3_Click(object sender, EventArgs e)

{//提示

List li = new List();

foreach (string str in u)

{

li.Add(int.Parse(str.TrimStart('a').TrimStart('b').TrimStart('c').TrimStart('d')));

}

List daichu = chupaiguize.tishi1(li, cvi);

if (daichu.Count == 0)

tishi.Text = "没有可出的牌";

else

{

string str="";

int ii = 0;

foreach( int ik in daichu )

{

ii += ik;

str += ik.ToString() + "+";

}

str = str.TrimEnd('+');

tishi.Text = "提示:"+str+"="+ii.ToString();

}

}}

当用户把手中的扑克牌全部出完后,系统提示本轮玩家胜利,并统计双方获得积分,比较积分的大小,获得积分多的一方获胜,本局游戏结束。

if (daichu.Count == 0)

{//本轮用户获胜

tishi.Text = "本轮用户获胜!获得积分:" + ci.ToString();

yhfenshu.Text = (int.Parse(yhfenshu.Text) + ci).ToString();

ci = 0;

cvi.Clear();

cui.Clear();

if (!kaishi)

{

int yf = int.Parse(yhfenshu.Text) + u.Count + v.Count;

yhfenshu.Text = yf.ToString();

int df = int.Parse(dnfenshu.Text);

if (df > yf)

tishi.Text = "本局电脑获胜!";

else if (df < yf)

tishi.Text = "本局用户获胜!";

else

tishi.Text = "本局平局!";

}

return;

}

4 结论

本文就口算能力的提升对小学生数学学习的重要性进行了阐述,并分析了当下小学生对电脑游戏的痴迷和盲目喜欢。为了让小学生在自己感兴趣的扑克牌游戏环境中获得口算能力的提升,利用网页设计技术,制作出一款可供玩家在网上进行游戏的扑克牌益智口算网页游戏,很好地让小学生们在游戏中获得知识的提升,寓教于乐,充分利用小学生阶段爱玩的天性,将四则运算的口算能力,在潜移默化中为小学生们吸收。让他们对数学感兴趣,为以后的初中、高中、大学的理科学习打下良好的基础。虽然游戏初期设计的比较简单,界面比较简陋,但我会不断提升自己的实力,对游戏进行优化,以期制作出一款界面契合小学生需求,可玩性、耐玩性都比较高的在线益智口算游戏。

本款游戏是在导师马致明教授的启发指导下开发设计的,在后期的开发设计过程中得到了导师以及同学朋友们的帮助和支持,在此感谢导师和大家的帮助,同时我也会不断努力,希望这款游戏能够得到广大小学生和家长的青睐。

参考文献:

[1] 刘长颖. 小学生加、减法口算时间分析[D]. 大连:辽宁师范大学, 2005.

[2] 陈晖. 学前教育专业学生语文素养的培养途径分析[J]. 教育教学论坛, 2016(41):274-275.

[3] 吴开道. 优化口算教学迫在眉睫[J]. 教师, 2010(28):49-49.

[4] 胡芍. 试论家校共育背景下的小学语文教学[J]. 中华少年,2017(31).

[5] 尹中卿. 要善于做加减乘除四则混合运算[J]. 中国人大, 2009(11):25-25.

[6] 武汉厚溥教育科技有限公司. ASP.NET网站开发[M].北京: 清华大学出版社, 2016.

[7] 张赵辉. 探析网页前端技术及其升华[J]. 科技致富向导, 2015(2):67-67.

[8] 田娟. 学校教职工体检管理信息系统的设计与实现[D].成都: 电子科技大学, 2014.

猜你喜欢
扑克牌口算游戏
两位数减两位数的口算(部级优课)
巧算扑克牌
混乱的扑克牌
算扑克牌的张数
我会口算100减几了
智趣
爆笑游戏
哪张牌是A?