24点运算游戏,做24点游戏的方法

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: