二十四点小游戏制作

合集下载

实现24点游戏

实现24点游戏

实现24点游戏1 基本功能描述:(1)游戏开始前,点击说明按钮查看,游戏的规则说明(2)点击洗牌按钮,洗牌后,玩家和计算机各得26张牌。

游戏开始(3)当玩家在指定文本框中输入计算式,点击确定,由程序判断是否符合规则要求(即判断是否用给定的数字运算。

例如,当你直接输入“24”是,会提示“请使用给定数字运算”,玩家手牌加2,并更新数字)。

如果符合要求,然后判断是否为24,则玩家获胜,手牌减2,否则加2。

数字更新。

(4)如果玩家不知道答案可以直接点击下一题,这是玩家手牌加2。

数字更新。

(5)当玩家手牌为0时,宣布玩家获胜。

当玩家手牌为52时,宣布玩家失败。

(6)右侧方框会显示玩家手牌。

2设计思路本程序采用基本对话框。

玩家和电脑各自2张牌分别用编辑框显示其数值。

在初始化函数中为0;点击“洗牌按钮”,调用OnButton2()函数,完成洗牌和发牌功能。

点击“确定按钮”,调用OK(),在OK()中建立cacl类的对象C,并调用cacl类中的result()函数实现对字符串的运算,并输出结果,判断是否为24.,根据结果之后更新界面。

点击“下一题”按钮,认为玩家不会做,直接更新界面。

3软件设计3.1设计步骤1)进入VC++程序后,创建MFC AppWizard(exe)工程,工程名为“24POINTGAMES”,在应用程序类型中选择基本对话框,完成对话框的创建。

2)在对话框中根据设计要求添加控件,包括按钮,单选按钮,编辑框,进度条,组合框,静态文本和位图。

修改其属性,并建立类向导,在相应的地方添加代码。

3)添加菜单,关联到主窗口。

4)对程序进行调试,修改其中的错误,直到实现所要求的各项功能3.2界面设计3.3关键代码建立cacl类实现对输入字符串的计算class calc{char *expression;enum token {OPAREN, ADD, SUB, MULTI, DIV,EXP, CPAREN, VALUE, EOL};void BinaryOp( token op, seqStack<int> &dataStack );token getOp( int &value );public:calc(char *s){ expression = new char[ strlen(s) + 1];strcpy( expression, s ); }~calc( ) { delete expression; }int result( );};洗牌发牌功能的实现:void CMy24POINTGAMESDlg::OnButton2(){for(int i=1;i<=52;i++) l.insert(i-1,i%13+1);//将52张牌一次存入l;//发给玩家的牌srand(time(NULL));for(int j=0;j<26;j++){int k=l.cl*rand()/(RAND_MAX+1);int B=l.remove(k); l1.insert(j,B);}m_1=l1.remove(0);m_2=l1.remove(0);//发给电脑的牌for(j=0;j<26;j++){int k=l.cl*rand()/(RAND_MAX+1);int B=l.remove(k); l2.insert(j,B);}m_3=l2.remove(0);m_4=l2.remove(0);m_code=26;UpdateData(FALSE);}确定按钮函数OK()的实现void CMy24POINTGAMESDlg::OnOK(){CString cst;GetDlgItemText(IDC_EDIT1,cst);char *a = (LPSTR)(LPCTSTR)cst;int n=0;int m;for(int i=0;i<20;i++){if(a[i]<48||a[i]>57) n=n;else{if(a[i+1]<48||a[i+1]>57) m=a[i]-48;else {m=10*(a[i]-48)+(a[i+1]-48); i++;}if(m==m_1||m==m_2||m==m_3||m==m_4) n++;}}if(n==4){calc C(a);UpdateData(FALSE);if(C.result()==24) {AfxMessageBox("恭喜你,回答正确,你将减少两张牌!",MB_OK);l1.insert(48-m_code,m_1);l1.insert(48-m_code,m_2);l1.insert(48-m_code,m_3);l1.insert(48-m_code,m_4);m_code-=2;UpdateData(FALSE);}else {AfxMessageBox("你弱爆了!",MB_OK);l2.insert(48-m_code,m_1);l2.insert(48-m_code,m_2);l2.insert(48-m_code,m_3);l2.insert(48-m_code,m_4);m_code+=2;UpdateData(FALSE);}//else AfxMessageBox("请使用给定的数,请认真做,不要耍赖",MB_OK);if(m_code==52) {AfxMessageBox("不好意思,你输了");OnButton2();} if(m_code<=2) {AfxMessageBox("恭喜你赢了");OnButton2();}if(m_code>2&&m_code<52) {m_1=l1.remove(0);m_2=l1.remove(0);m_3=l2.remove(0);m_4=l2.remove(0);}}else AfxMessageBox("请使用给定的数,请认真做,不要耍赖",MB_OK);m_E=" ";UpdateData(FALSE);}4 测试结果程序运行界面如下;点击说明后:点击“洗牌”输入正确结果:。

二十四点文档

二十四点文档

二十四点简介二十四点是一种基于纸牌的益智游戏,目标是通过组合四张牌,使得它们的数字组合结果为24。

这个游戏很受欢迎,因为它可以锻炼玩家的数学思维能力和逻辑推理能力。

在这篇文档中,我们将介绍二十四点的规则、游戏玩法以及一些策略技巧。

游戏规则材料•一副扑克牌(不包括大小王),共52张•玩家(可以是两个或更多)准备•从扑克牌中选择四张牌•将这四张牌展示给所有玩家看游戏过程1.每个玩家利用这四张牌,通过使用加、减、乘、除的运算符以及括号,得到表达式使得结果等于24。

2.玩家可以以任何顺序对这四张牌进行运算,但每个数字只能使用一次。

3.如果玩家能够找到一个表达式使得结果等于24,则获胜。

4.如果所有玩家都没有找到结果等于24的表达式,则无人获胜,游戏继续。

牌的价值•Ace(A):1点•2-10:数字牌的点数•Jack(J):11点•Queen(Q):12点•King(K):13点特殊规则•所有的除法都使用浮点数进行计算。

•除数不能为0。

游戏玩法示例假设我们有四张牌:2、3、4、5。

我们的目标是找到一个表达式,使其结果等于24。

我们可以尝试以下表达式:1.(2 + 3) x (4 + 5) = 45结果不等于242.(2 x 3) x (4 + 5) = 54结果不等于243.(2 + (3 x 4)) x 5 = 50结果不等于244.(2 x (3 + 4)) x 5 = 70结果不等于245.(2 x 3 x 4) + 5 = 29结果不等于24通过以上尝试,我们无法找到结果为24的表达式。

因此,这个回合没有玩家获胜。

策略技巧以下是一些帮助您在二十四点游戏中提高胜率的策略技巧:1.充分利用括号:尝试使用括号将数字组合成更复杂的表达式,这样可以增加找到结果为24的可能性。

2.利用乘法和除法:乘法和除法可以产生更大的结果,因此它们是找到结果为24的关键运算符。

3.优先处理较大的数字:在尝试找到结果为24的表达式时,优先使用较大的数字。

24点游戏设计ppt课件

24点游戏设计ppt课件

培养逻辑思维
在解决24点问题时,玩家需要运用 逻辑思维,分析数字之间的关系,寻 找最优的运算路径。
增强创新能力
为了解决一些难度较大的24点问题 ,玩家需要发挥创造性思维,尝试不 同的组合和运算方式。
提高时间管理能力
在限定的时间内完成24点计算,有 助于培养玩家的时间管理能力,提高 反应速度和决策能力。
02
CHAPTER
游戏规则
基础规则解析
1 2
目标
使用四张1-9的数字卡,通过加、减、乘、除四 则运算,使得运算结果为24。
输入
四张1-9的数字卡。
3
输出
一种或多种通过四则运算得到的24的解法。
特殊规则及处理
分数计算
允许分数运算,如1/2、2/3等。
阶乘运算
允许使用阶乘符号,如5!表示5的阶乘。
05
CHAPTER
游戏简介
游戏起源与发展
24点游戏起源于16世纪的欧洲 ,最初是用来训练数学思维的智
力游戏。
随着时间的推移,24点游戏逐 渐发展成为全球范围内广受欢迎
的数学游戏。
游戏的规则和目标也随着不同地 区和文化而有所变化,但核心玩
法仍保持不变。
游戏玩法简介
游戏通常采用一副扑克牌,去 掉大小王,共52张牌。
03
CHAPTER
游戏策略
高效的计算策略
熟练掌握基本算术运算
加减乘除是解决24点游戏的基础,玩家需要熟练掌握这些基本运 算。
优先解决大数
在计算过程中,优先处理较大的数字可以减少整体的计算量。
利用括号和运算优先级
合理使用括号,确保先进行必要的乘除运算,再进行加减运算。
利用特殊数学特性的策略

24点小游戏

24点小游戏

“24”点小游戏
前些日子数学老师教我们学算“24”点,我觉得很有意思。

所以,一有时间就和爸爸妈妈比赛算“24”点。

算“24”其实也有小窍门:
第一步:想清楚得数为24的乘法口诀或加减法算式。

第二步:从给出的现有数字中找出可以组成24的相关数字:如:“3”、“8”、“4”、“6”、“2”、“12”等。

第三步:将其他数字通过运算,得出需要的数字,如:已有“3”,再通过计算得出“8”,然后3×8=24,或已有条件“9”,再将其他数字计算出“15”,然后9+15=24等等。

要将几个简单的数字算出“24”,有时也不止一种方法。

比如:3、4、4、6这四个数字,计算时,可以先用4-3得出1后乘4得4,4×6得出24,或者先用6-4得出2后再乘4得出8,8×3得24。

算“24”点真的很有意思!
二(1)班
杭音贝。

python经典趣味24点游戏程序设计

python经典趣味24点游戏程序设计

python经典趣味24点游戏程序设计⼀、游戏玩法介绍:24点游戏是⼉时玩的主要益智类游戏之⼀,玩法为:从⼀副扑克中抽取4张牌,对4张牌使⽤加减乘除中的任何⽅法,使计算结果为24。

例如,2,3,4,6,通过( ( ( 4 + 6 ) - 2 ) * 3 ) = 24,最快算出24者剩。

⼆、设计思路:由于设计到了表达式,很⾃然的想到了是否可以使⽤表达式树来设计程序。

本程序的确使⽤了表达式树,也是程序最关键的环节。

简要概括为:先列出所有表达式的可能性,然后运⽤表达式树计算表达式的值。

程序中⼤量的运⽤了递归,各个递归式不是很复杂,⼤家耐⼼看看,应该是能看懂的表达式树:表达式树的所有叶⼦节点均为操作数(operand),其他节点为运算符(operator)。

由于本例中都是⼆元运算,所以表达式树是⼆叉树。

下图就是⼀个表达式树具体步骤:1、遍历所有表达式的可能情况遍历分为两部分,⼀部分遍历出操作数的所有可能,然后是运算符的所有可能。

全排列的计算采⽤了递归的思想#返回⼀个列表的全排列的列表集合def list_result(l):if len(l) == 1:return [l]all_result = []for index,item in enumerate(l):r = list_result(l[0:index] + l[index+1:])map(lambda x : x.append(item),r)all_result.extend(r)return all_result2、根据传⼊的表达式的值,构造表达式树由于表达式树的特点,所有操作数均为叶⼦节点,操作符为⾮叶⼦节点,⽽⼀个表达式(例如( ( ( 6 + 4 ) - 2 ) * 3 ) = 24) 只有3个运算符,即⼀颗表达式树只有3个⾮叶⼦节点。

所以树的形状只有两种可能,就直接写死了#树节点class Node:def __init__(self, val):self.val = valself.left = Noneself.right = Nonedef one_expression_tree(operators, operands):root_node = Node(operators[0])operator1 = Node(operators[1])operator2 = Node(operators[2])operand0 = Node(operands[0])operand1 = Node(operands[1])operand2 = Node(operands[2])operand3 = Node(operands[3])root_node.left = operator1root_node.right =operand0operator1.left = operator2operator1.right = operand1operator2.left = operand2operator2.right = operand3return root_nodedef two_expression_tree(operators, operands):root_node = Node(operators[0])operator1 = Node(operators[1])operator2 = Node(operators[2])operand0 = Node(operands[0])operand1 = Node(operands[1])operand2 = Node(operands[2])operand3 = Node(operands[3])root_node.left = operator1root_node.right =operator2operator1.left = operand0operator1.right = operand1operator2.left = operand2operator2.right = operand3return root_node3、计算表达式树的值也运⽤了递归#根据两个数和⼀个符号,计算值def cal(a, b, operator):return operator == '+' and float(a) + float(b) or operator == '-' and float(a) - float(b) or operator == '*' and float(a) * float(b) or operator == '÷' and float(a)/float(b) def cal_tree(node):if node.left is None:return node.valreturn cal(cal_tree(node.left), cal_tree(node.right), node.val)4、输出所有可能的表达式还是运⽤了递归def print_expression_tree(root):print_node(root)print ' = 24'def print_node(node):if node is None :returnif node.left is None and node.right is None:print node.val,else:print '(',print_node(node.left)print node.val,print_node(node.right)print ')',#print ' ( %s %s %s ) ' % (print_node(node.left), node.val, print_node(node.right)),5、输出结果三、所有源码#coding:utf-8from __future__ import divisionfrom Node import Nodedef calculate(nums):nums_possible = list_result(nums)operators_possible = list_result(['+','-','*','÷'])goods_noods = []for nums in nums_possible:for op in operators_possible:node = one_expression_tree(op, nums)if cal_tree(node) == 24:goods_noods.append(node)node = two_expression_tree(op, nums)if cal_tree(node) == 24:goods_noods.append(node)map(lambda node: print_expression_tree(node), goods_noods)def cal_tree(node):if node.left is None:return node.valreturn cal(cal_tree(node.left), cal_tree(node.right), node.val)#根据两个数和⼀个符号,计算值def cal(a, b, operator):return operator == '+' and float(a) + float(b) or operator == '-' and float(a) - float(b) or operator == '*' and float(a) * float(b) or operator == '÷' and float(a)/float(b) def one_expression_tree(operators, operands):root_node = Node(operators[0])operator1 = Node(operators[1])operator2 = Node(operators[2])operand0 = Node(operands[0])operand1 = Node(operands[1])operand2 = Node(operands[2])operand3 = Node(operands[3])root_node.left = operator1root_node.right =operand0operator1.left = operator2operator1.right = operand1operator2.left = operand2operator2.right = operand3return root_nodedef two_expression_tree(operators, operands):root_node = Node(operators[0])operator1 = Node(operators[1])operator2 = Node(operators[2])operand0 = Node(operands[0])operand1 = Node(operands[1])operand2 = Node(operands[2])operand3 = Node(operands[3])root_node.left = operator1root_node.right =operator2operator1.left = operand0operator1.right = operand1operator2.left = operand2operator2.right = operand3return root_node#返回⼀个列表的全排列的列表集合def list_result(l):if len(l) == 1:return [l]all_result = []for index,item in enumerate(l):r = list_result(l[0:index] + l[index+1:])map(lambda x : x.append(item),r)all_result.extend(r)return all_resultdef print_expression_tree(root):print_node(root)print ' = 24'def print_node(node):if node is None :returnif node.left is None and node.right is None:print node.val,else:print '(',print_node(node.left)print node.val,print_node(node.right)print ')',if __name__ == '__main__':calculate([2,3,4,6])以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

24点游戏 java设计

24点游戏 java设计

1.1题目说明
一副牌中抽去大小王剩下52张(如果初练也可只用1-10者40张牌),任意抽取4张牌(称牌组),用加、减、乘、除(可加括号)把牌面上的数算成24。

每张牌必须使用一次且只能用一次,如抽出的牌是3、8、8、9,那么算式(9-8)*3*8或3*8+(9-8)或(9-8%8)*3等
【版本1】
从52张牌中任意选取4张扑克牌,如图4,每张牌表示一个数字。

输入由四张被选择的扑克牌面的四个数字构成的一个表达式10*(8-6)+4,如图5。

点击验证按钮,显示消息:
如输入的表达式为10+8+6-4.得不到正确的结果,显示消息:
如输入的数据与纸牌数据不同,显示消息:
点击刷新按钮,得到另外4张牌。

版本二
改进版本1,如果解存在,就显示该解。

如存在多个解,显示这样的多个解。

如8,6,2,1,可能的解有:6+(8+1)*2,8*(6-2-1),......
如果不存在解,显示无解消息。

由用户输入1到13之间的四个数,检查是否有解。

版本3
从52张牌中选择4张牌,这四张牌可能无解。

从52张牌中选择4张牌的挑选次数是多少?
在这些所有可能的选择中,有多少有解?
成功的几率是多少?
编程求解上述问题。

1.2设计思路
1.对栈,集合,数组,递归等知识熟悉,并且能熟练掌握
2.首先在程序的设计部分由分为几个步骤:
3.第一步:查阅有关归并排序算法的资料。

4.第二步:设计这个项目的整体架构和算法。

5.第三步:选择一门程序设计语言进行算法的描述。

6.其次,进行程序的调试。

1.3测试。

详解如何利用Python制作24点小游戏

详解如何利用Python制作24点小游戏

详解如何利⽤Python制作24点⼩游戏⽬录先睹为快游戏规则(改编⾃维基百科)逐步实现Step1:制作24点⽣成器Step2:定义游戏精灵类Step3:实现游戏主循环先睹为快游戏规则(改编⾃维基百科)从1~10这⼗个数字中随机抽取4个数字(可重复),对这四个数运⽤加、减、乘、除和括号进⾏运算得出24。

每个数字都必须使⽤⼀次,但不能重复使⽤。

逐步实现Step1:制作24点⽣成器既然是24点⼩游戏,当然要先定义⼀个24点游戏⽣成器啦。

主要思路就是随机⽣成4个有解的数字,且范围在1~10之间,代码实现如下:def generate(self):self.__reset()while True:self.numbers_ori = [random.randint(1, 10) for i in range(4)]self.numbers_now = copy.deepcopy(self.numbers_ori)self.answers = self.__verify()if self.answers:break在验证4个数字是否有解并求出所有解部分,我直接暴⼒枚举然后去重了,感兴趣的同学可以⾃⼰再优化⼀下求解算法(有数字重复的时候)。

我的代码如下图所⽰,其实就是递归枚举所有排序然后⼀⼀验证是否有解:'''验证⽣成的数字是否有答案'''def __verify(self):answers = []for item in self.__iter(self.numbers_ori, len(self.numbers_ori)):item_dict = []list(map(lambda i: item_dict.append({str(i): i}), item))solution1 = self.__func(self.__func(self.__func(item_dict[0], item_dict[1]), item_dict[2]), item_dict[3])solution2 = self.__func(self.__func(item_dict[0], item_dict[1]), self.__func(item_dict[2], item_dict[3]))solution = dict()solution.update(solution1)solution.update(solution2)for key, value in solution.items():if float(value) == self.target:answers.append(key)# 避免有数字重复时表达式重复(T_T懒得优化了)answers = list(set(answers))return answers'''递归枚举'''def __iter(self, items, n):for idx, item in enumerate(items):if n == 1:yield [item]else:for each in self.__iter(items[:idx]+items[idx+1:], n-1):yield [item] + each'''计算函数'''def __func(self, a, b):res = dict()for key1, value1 in a.items():for key2, value2 in b.items():res.update({'('+key1+'+'+key2+')': value1+value2})res.update({'('+key1+'-'+key2+')': value1-value2})res.update({'('+key2+'-'+key1+')': value2-value1})res.update({'('+key1+'×'+key2+')': value1*value2})value2 > 0 and res.update({'('+key1+'÷'+key2+')': value1/value2})value1 > 0 and res.update({'('+key2+'÷'+key1+')': value2/value1})return resStep2:定义游戏精灵类因为玩家需要通过⿏标点击来操作卡⽚,这时候就涉及到⼀些碰撞检测。

24点游戏方案

24点游戏方案

24点游戏方案简介24点游戏是一种通过运算符将4个数字组合成24的益智游戏。

这个游戏通过简单的加、减、乘、除四则运算来挑战玩家的计算能力和逻辑思维。

本文将介绍一种解决24点游戏的算法方案。

算法思路解决24点游戏的基本思路是通过穷举所有可能的运算组合,找到一个等于24的组合。

我们可以将这个过程分解为以下几个步骤:1.生成所有可能的数字组合2.生成所有可能的运算符组合3.组合数字和运算符,计算结果并判断是否等于24下面我们将具体介绍每个步骤的实现方法。

生成数字组合为了生成所有可能的数字组合,我们可以使用循环嵌套的方式来穷举。

假设有4个数字,每个数字的取值范围是1到9之间的整数,那么我们可以使用以下的代码来生成所有可能的数字组合:numbers = []for i in range(1, 10):for j in range(1, 10):for k in range(1, 10):for l in range(1, 10):numbers.append([i, j, k, l])生成的numbers列表将包含所有可能的数字组合。

生成运算符组合为了生成所有可能的运算符组合,我们可以使用递归方式来穷举。

假设有n个运算符,每个运算符的取值范围是加、减、乘、除,那么我们可以使用以下的代码来生成所有可能的运算符组合:operators = ['+', '-', '*', '/']def generate_operator_combinations(n):if n ==1:return operatorselse:result = []for operator in operators:for combination in generate_operator_combinations(n -1):result.append(operator + combination)return result生成运算符组合的过程将返回一个包含所有可能组合的列表。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

湛江师院继续教育学院学生毕业论文(设计)院别继续教育学院专业计算机网络技术年级2011级学生姓名论文题目二十四点小游戏制作评语:评分指导教师签名论文内容提要:(300字以内)本论文是一个关于小游戏二十四点的设计与实现的论文,此二十四点小游戏的设计运用了Ja va 面向对象编程语言。

游戏功能模块主要包括:答案查询、答错提示、时间提示、计分系统、错误处理和禁止。

本文也对游戏功能模块的代码和校果图进行演示,但由于学术不精本小游戏存在一些漏洞。

关键词:学生签名:二十四点小游戏制作摘要:二十一世纪是一个充满着工作压力的世纪,各行各业的工作人士不免有很大的工作压力,越来越需要一个业余放松的平台。

二十四点之类的小游戏是至好不过的选择啦!能够很好的放松紧张的神经,从而提高工作人士的生活质量,也间接地提高了工作人士的工作质量和工作效率!本游戏采用java作为程序的开发工具,主要包括答案查询、答错提示、时间提示、计分系统等功能模块。

关键词:java、二十四点小游戏、放松平台Twenty-four point gameJIE YukaiZhanjiang Normal University College, Zhanjiang, 524048 ChinaAbstract:It is 21st century that is full of working pressure,and all of the worker are having a lot of working pressure,so we need a platform to relaxed.Twenty-four point game is a good choose!It will help you relaxed well and improve staff’s quality of life,and it will improve the staff’s work quality and efficiency!The game uses Java as program development tool,include answer to the query, answer hints,temporal cue,point system and so on!Key word: java、Twenty-four point game、a platform to relaxed1.引言1.1选题背景随着网络技术的发展,小游戏在网络上的发展如火如荼。

其中植物僵尸大战、洛克王国、赛尔号等小游戏如雨后春笋般涌现出来。

这些游戏已经成为很多人的一个放松平台。

而对于网络上很多人喜欢玩的二十四点小游戏个人认为并不完善,漏洞层出不穷,另很多人大失所望,因此,我个人开发了个二十四点小游戏希望能迎合众多网络朋友的口味。

1.2开发意义二十四点小游戏(KTV Management Imformation System,简称KTV-MIS)是一个不仅能放松人的神经而且益智的趣味小游戏。

对于21世纪的今天,作为一个社会工作者来说,面对日益剧烈的竞争,工作压力都是很大的。

为了释放压力,就需要一个良好的减压平台。

众所周知,网络上的小游戏就是一个很好的释放平台,但众多小游戏之中不免有做得不合网络朋友的口味的,其中,小游戏二十四点就其中一个,我此次开发个二十四点小游戏,希望能够符合网络朋友的口味,进一步完善网络小游戏这一个减压平台。

2. 开发技术简介本游戏在开发技术上采用了java面向对象语言。

Java是由James Gosling、Patrick Naughton、Chris Warth、Ed Frank、和Mike Sheridan于1991年在Sun公司构想出来的。

开发第一版本花费18个月。

这种语言最初称为Oak,于1995年被命名为java。

[1]3.游戏功能模块系统分析在二十四点小游戏中,根据玩家需求,游戏功能模块主要有答案查询、答错提示、时间提示、计分系统、输入错误提示或禁止。

1)答案查询:当玩家没想出答案但又想在答题前知道答案的情况下可以查询问题的答案。

2)答错提示:玩家答题错误后,显示正确的答案。

3)时间提示:一局游戏时间是120秒,时间提示可以让玩家知道在120秒内答对多少题。

4)计分系统:根据玩家答对或错进行加分或减分。

5)输入错误提示或禁止:跟据游戏情节,当玩家输入表达式错误时进行提示或不能输入某键时禁止按该键。

4. 游戏设计4.1 游戏结构图设计图4.1 二十四点小游戏功能模块结构图 5.游戏的设计与实现5.1图形用户界面设计与实现二十四点小游戏答案查询 错误处理计分系统时间提示答错提示显示问题答案 答错减一分答对加一分 120s 倒数显示正确答案表达式不合理提示错误输入后导致表达式不合理禁止输入本小游戏在设计用户图形界面时使用了空布局。

空布局就是把一个容器的布局设置为null布局。

空布局采用setBounds()方法设置组件本身的大小和在容器中的位置:setBound(int x,int y,int width,int height)。

组件占据为矩形,参数x,y是组件的左上角在容器中的位置坐标;参数weidth、height是组件的宽和高。

[2]本游戏界面大体如下图。

上半部分面板用于显示随机出现的卡片,左下部分面板用于显示键盘,右下部分面板用于显示玩家在游戏是的一些相关信息。

图5.1 二十四点小游戏功能模块结构图5.2答案查询功能设计与实现答案查询功能是在玩家未答题前不清楚答案时急切想知道答案的情况下所提供的一个查询(作弊)功能。

答案由calculate.java文件中的方法计算得出,然后当用户按下查看按键时把答案从answer标签输出。

计算部分主要代码://利用for循环遍历所有可能出现的结果//先计算前两个数for(int a=0;a<4;a++){ //第一个数for(int b=0;b<4;b++){ //第一个符号for(int c=0;c<4;c++){ //第二个数if(a==c) continue ; //如果出现重复的牌,则条过此轮循环result = 0 ;switch (operator[b]){case '+':result = number[a]+number[c] ;break ;case '-':result = number[a]-number[c] ;break ;case '*':result = number[a]*number[c] ;break ;case '/':result = number[a]/number[c] ;break ;}results[0] = result ; //备份第一第二个数的运算结果,便于返回//前两个数的运算结果和第三个数进行运算for(int d=0;d<4;d++){ //第二个符号for(int e=0;e<4;e++){ //第三个数if(e==a||e==c) continue ; //如果出现重复的牌,则跳过此轮循环result = results[0] ; //返回第一第二个数的运算结果switch (operator[d]){case '+':result = result+number[e] ;break ;case '-':result = result-number[e] ;break ;case '*':result = result*number[e] ;break ;case '/':result = result/number[e] ;break ;}results[1] = result ; //备份第一二三个数的运算结果for(int f=0;f<4;f++){ //第三个符号for(int g=0;g<4;g++){ //第四个数if(g==a||g==c||g==e) continue ; //如果出现重复的牌,则跳过此轮循环result = results[1] ; //返回第一二三个数的运算结果switch (operator[f]){case '+':result = result+number[g] ;break ;case '-':result = result-number[g] ;break ;case '*':result = result*number[g] ;break ;case '/':result = result/number[g] ;break ;}//判断运算结果是否为24,是则输出算式if(result==24){System.out.println("(("+number[a]+""+operator[b]+""+number[c]+")"+operator[d]+""+number[e]+")"+operator[f]+""+number[g]);getResult = "(("+number[a]+""+operator[b]+""+number[c]+")"+operator[d]+""+number[e]+")"+operator[f]+""+number[g] ;}输出部分主要代码:answer=new JLabel(strAnswer);其效果如下:图5.2 二十四点小游戏答案提示模块效果图5.3答案错提示功能设计与实现答错提示用于玩家答题错误后提示正确的答案。

其主要代码如下:if(ctr.Controllers(finalReslut)){r=r+1;lastLabel.setText("答案正确!") ;lastLabel.setVisible(true) ;}else{f=f+1;lastLabel.setText("上一次答案"+lastAnswer);lastLabel.setVisible(true) ;}其效果如下:图5.3 二十四点小游戏答错提示功能效果图5.4时间提示功能设计与实现时间提示功能规定了玩家必须在120s内答题,否则按“交白卷”处理。

相关文档
最新文档