24点运算游戏,做24点游戏的方法
本文主要详细介绍如何使用Python和Pygame实现24点游戏。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
00-1010介绍游戏介绍实现代码游戏的效果展示
目录
我第一次玩21点是在初中。那时候我和表哥在表哥家玩。我表哥提议玩21点。我表哥比我们小三岁。也许她在上小学。
取出一副扑克牌去掉大小怪和花牌,从剩下的牌中随机找出四张牌。谁先能算出24的加减乘除,谁就赢了。
如果每个人都同意放弃或者有人解决了,开始一个新游戏。结果我们兄弟三个都是输多赢少,表兄弟明显做了准备。
其实24点游戏不仅可以用来和朋友朋友无聊的时候玩,还可以锻炼思维能力,尤其是对家里的孩子来说,可以提高数学能力。
多做运动是有好处的,尤其是对那些数学不好的孩子。3354可以提高心算的速度和准确率。当数学变成了游戏,孩子们更感兴趣了。今天木木子就带大家写一个带界面的“24点游戏”。
导语
(1)什么是21点游戏?
象棋益智游戏,结果等于二十四。
(2)游戏规则
选择任意四个数字(1——10),用加、减、乘、除(可以加括号)计算出显示为24的数字。每个数字只能使用一次。“算24分”,作为锻炼思维的智力游戏,也要注意计算中的技巧。在计算的时候,我们不能尝试卡面上四个数字的不同组合,3354,更不能碰在一起凑在一起。
实施例:3,8,8,9
答案:38(9-8)=24
游戏介绍
1.定义游戏这部分代码小写game.py文件
定义游戏
导入副本
随机导入
导入pygame
功能:
卡片类别
初始参数:
- x,y:左上角坐标
-宽度:宽
高度:
- text:文本
-font :[字体路径,字体大小]
-font _ colors (list) :字体颜色
-BG _ colors (list) :背景色
班卡(pygame.sprite.Sprite):
def __init__(self,x,y,width,height,text,font,font_colors,bg_colors,attribute,**kwargs):
py game . sprite . sprite . _ _ init _ _(self)
self.rect=pygame。Rect(x,y,宽度,高度)
self.text=text
self.attribute=属性
self.font_info=font
self . font=py game . font . font(font[0],font[1])
self.font_colors=font_colors
self.is_selected=False
self.select_order=None
self.bg_colors=bg_colors
把它画在屏幕上
def draw(自身、屏幕、鼠标_位置):
pygame.draw.rect(screen,self.bg_colors[1],self.rect,0)
if self . rect . collide point(mouse _ pos):
pygame.draw.rect(screen,self.bg_colors[0],self.rect,0)
font _ color=self . font _ colors[self . is _ selected]
text _ render=self . font . render(self . text,True,font_color)
font _ size=self . font . size(self . text)
screen.blit(text_render, (self.rect.x+(self.rect.width-font_size[0])/2, self.rect.y+(self.rect.height-font_size[1])/2))
按钮类
class Button(Card):
def __init__(self, x, y, width, height, text, font, font_colors, bg_colors, attribute, **kwargs):
Card.__init__(self, x, y, width, height, text, font, font_colors, bg_colors, attribute)
根据button function执行响应操作
def do(self, game24_gen, func, sprites_group, objs):
if self.attribute == NEXT:
for obj in objs:
obj.font = pygame.font.Font(obj.font_info[0], obj.font_info[1])
obj.text = obj.attribute
self.font = pygame.font.Font(self.font_info[0], self.font_info[1])
self.text = self.attribute
game24_gen.generate()
sprites_group = func(game24_gen.numbers_now)
elif self.attribute == RESET:
for obj in objs:
obj.font = pygame.font.Font(obj.font_info[0], obj.font_info[1])
obj.text = obj.attribute
game24_gen.numbers_now = game24_gen.numbers_ori
game24_gen.answers_idx = 0
sprites_group = func(game24_gen.numbers_now)
elif self.attribute == ANSWERS:
self.font = pygame.font.Font(self.font_info[0], 20)
self.text = [%d/%d]: % (game24_gen.answers_idx+1, len(game24_gen.answers)) + game24_gen.answers[game24_gen.answers_idx]
game24_gen.answers_idx = (game24_gen.answers_idx+1) % len(game24_gen.answers)
else:
raise ValueError(Button.attribute unsupport %s, expect %s, %s or %s... % (self.attribute, NEXT, RESET, ANSWERS))
return sprites_group
24点游戏生成器
class game24Generator():
def __init__(self):
self.info = game24Generator
生成器
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
只剩下一个数字时检查是否为24
def check(self):
if len(self.numbers_now) == 1 and float(self.numbers_now[0]) == self.target:
return True
return False
重置
def __reset(self):
self.answers = []
self.numbers_ori = []
self.numbers_now = []
self.target = 24.
self.answers_idx = 0
验证生成的数字是否有答案
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 res
2.游戏主函数
def main():
游戏效果展示
到此这篇关于Python+Pygame实战之24点游戏的实现的文章就介绍到这了,更多相关Python Pygame 24点游戏内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。