导语

哈喽!每日游戏更新系列——木木子又来啦!今天讲一个大家都很熟悉的游戏!

我第一次玩24点是初中的时候,那时候和堂弟表哥在堂妹家玩,堂妹提出玩24点游戏,堂妹比我

们小三岁,可能正在上小学吧。

拿出一副扑克牌去掉大小怪和花牌,从剩下的牌里随便找出四张,谁能先用加减乘除算出24就算

赢。如果大家都同意放弃或者有人计算出来就重新开始一局。结果是我们三个哥哥都输多赢少,堂

妹显然是经过了准备的。

其实24点小游戏除了能用来无聊的时候跟朋友与一起玩儿下,还能锻炼思维能力,尤其是家里的小

孩子提升数学能力,

多锻炼还是很有好处的,尤其是那些数学不好小孩子——可提高心算的速度和准确度,当数学变成

游戏之后孩子也更有兴趣嘛~

今天木木子就带大家写一款有界面的“24点小游戏”哦

正文

游戏介绍:

(1)什么是24点游戏?

棋牌类益智游戏,要求结果等于二十四

(2)游戏规则。

任意抽取4个数字(1——10),用加、减、乘、除(可加括号)把出现的数算成24。每个数字必

须用一次且只能用一次。“算24点”作为一种锻炼思维的智力游戏,还应注意计算中的技巧问题。计

算时,我们不可能把牌面上的4个数的不同组合形式——去试,更不能瞎碰乱凑。

例:3、8、8、9

答案:3×8÷(9-8)=24

(一)定义游戏这部分代码小写game.py文件。

'''定义游戏'''
import copy
import random
import pygame'''
Function:卡片类
Initial Args:--x,y: 左上角坐标--width: 宽--height: 高--text: 文本--font: [字体路径, 字体大小]--font_colors(list): 字体颜色--bg_colors(list): 背景色
'''
class Card(pygame.sprite.Sprite):def __init__(self, x, y, width, height, text, font, font_colors, bg_colors, attribute, **kwargs):pygame.sprite.Sprite.__init__(self)self.rect = pygame.Rect(x, y, width, height)self.text = textself.attribute = attributeself.font_info = fontself.font = pygame.font.Font(font[0], font[1])self.font_colors = font_colorsself.is_selected = Falseself.select_order = Noneself.bg_colors = bg_colors'''画到屏幕上'''def draw(self, screen, mouse_pos):pygame.draw.rect(screen, self.bg_colors[1], self.rect, 0)if self.rect.collidepoint(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.attributeself.font = pygame.font.Font(self.font_info[0], self.font_info[1])self.text = self.attributegame24_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.attributegame24_gen.numbers_now = game24_gen.numbers_origame24_gen.answers_idx = 0sprites_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 Truereturn 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

(二)游戏主函数。

def main():# 初始化, 导入必要的游戏素材pygame.init()pygame.mixer.init()screen = pygame.display.set_mode(SCREENSIZE)pygame.display.set_caption('24点小游戏')win_sound = pygame.mixer.Sound(AUDIOWINPATH)lose_sound = pygame.mixer.Sound(AUDIOLOSEPATH)warn_sound = pygame.mixer.Sound(AUDIOWARNPATH)pygame.mixer.music.load(BGMPATH)pygame.mixer.music.play(-1, 0.0)# 24点游戏生成器game24_gen = game24Generator()game24_gen.generate()# 精灵组# --数字number_sprites_group = getNumberSpritesGroup(game24_gen.numbers_now)# --运算符operator_sprites_group = getOperatorSpritesGroup(OPREATORS)# --按钮button_sprites_group = getButtonSpritesGroup(BUTTONS)# 游戏主循环clock = pygame.time.Clock()selected_numbers = []selected_operators = []selected_buttons = []is_win = Falsewhile True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit(-1)elif event.type == pygame.MOUSEBUTTONUP:mouse_pos = pygame.mouse.get_pos()selected_numbers = checkClicked(number_sprites_group, mouse_pos, 'NUMBER')selected_operators = checkClicked(operator_sprites_group, mouse_pos, 'OPREATOR')selected_buttons = checkClicked(button_sprites_group, mouse_pos, 'BUTTON')screen.fill(AZURE)# 更新数字if len(selected_numbers) == 2 and len(selected_operators) == 1:noselected_numbers = []for each in number_sprites_group:if each.is_selected:if each.select_order == '1':selected_number1 = each.attributeelif each.select_order == '2':selected_number2 = each.attributeelse:raise ValueError('Unknow select_order %s, expect 1 or 2...' % each.select_order)else:noselected_numbers.append(each.attribute)each.is_selected = Falsefor each in operator_sprites_group:each.is_selected = Falseresult = calculate(selected_number1, selected_number2, *selected_operators)if result is not None:game24_gen.numbers_now = noselected_numbers + [result]is_win = game24_gen.check()if is_win:win_sound.play()if not is_win and len(game24_gen.numbers_now) == 1:lose_sound.play()else:warn_sound.play()selected_numbers = []selected_operators = []number_sprites_group = getNumberSpritesGroup(game24_gen.numbers_now)# 精灵都画到screen上for each in number_sprites_group:each.draw(screen, pygame.mouse.get_pos())for each in operator_sprites_group:each.draw(screen, pygame.mouse.get_pos())for each in button_sprites_group:if selected_buttons and selected_buttons[0] in ['RESET', 'NEXT']:is_win = Falseif selected_buttons and each.attribute == selected_buttons[0]:each.is_selected = Falsenumber_sprites_group = each.do(game24_gen, getNumberSpritesGroup, number_sprites_group, button_sprites_group)selected_buttons = []each.draw(screen, pygame.mouse.get_pos())# 游戏胜利if is_win:showInfo('Congratulations', screen)# 游戏失败if not is_win and len(game24_gen.numbers_now) == 1:showInfo('Game Over', screen)pygame.display.flip()clock.tick(30)

(三)游戏效果。

总结

这款锻炼思维能力的“24点小游戏”就完成啦~拿去不谢,边玩儿游戏边提升自己数学能力吧!

Pygame实战:家里的小孩数学算数能力很差嘛?别慌—这款“巧算24点小游戏”等你来玩,管用。相关推荐

  1. Pygame实战:这年头塔除了拆还能干什么?这款好玩上瘾的塔防游戏,了解一下嘛

    导语 >>> 这年头塔除了拆还能干什么?这款好玩上瘾的塔防游戏,了解一下!! 自从塔诞生的时候起,我们就开始让毁灭的雨点从敌人的头顶上方倾泻而下. 现在很多游戏都将塔作为一个标志性的 ...

  2. Pygame实战:Python做一款超好玩的滑雪大冒险小游戏,超会玩【附源码】

    导语 ​冬日当然要和心爱的人一起去滑雪, 徜徉在雪白的世界, 浪漫又刺激!唯有爱和滑雪不可辜负! 不但风景绝美,而且还超!会!玩! 现在还不是时候 但秋天已过半动冬天还会远吗? 既然不能现在去滑雪,但 ...

  3. 小孩孩子应用题计算机错误,孩子做数学应用题的能力很差,该怎么办?

    2019-08-20 18:03:57 关于数学应用题太差怎么办问题如下:问题分析:对于孩子的成绩家长都是非常关注的,望子成龙是每个家长的心愿.但是受到遗传.体质.后天的营养.环境以及教育的不同,孩子 ...

  4. 中国人数学能力很差?

    前一段时间,名为"亚洲人数学能力其实很差?"的视频猛登热搜榜,引发网友热议. 随后,博主发布道歉视频并表示其言论的错误性.在国内,我们的教育大多是以应试教育为主,升学压力可想而知. ...

  5. Pygame实战:记忆差怎么办?别急,增强记忆力的小游戏送给你~【越玩越上瘾】

    导语 哈喽!大家好,我是木木子. 今日游戏更新系列来啦,是不是很想知道今天的游戏是什么类型的?立马安排上-- 随着年纪的不断上升,我们开始丢三落四,忘东忘西,记忆力越来越差了! 这不止大人随着年纪增大 ...

  6. c语言怎么编程极差,我是一个编程能力很差的计算机专业的孩子。。==

    好无语,高考后没怎么思考就报了志愿,录取后知道是软件工程专业,想想学计算机啊,会挺好玩儿的吧,就带着录取通知书屁颠屁颠开始了大学生活. 但是真正到了大学才知道,我这专业要求编程能力要很强啊啊啊!!!从 ...

  7. Pygame实战:BOOM 这有一款超刺激的扎气球游戏等你来玩~

    导语 ​ ​ 前几天,有人私信小编: 说陪女朋友在小广场上面逛街玩儿扎气球:结果一个都没扎破,扎心了老铁. 女朋友都要离家出走了~让我给想想办法:小编只想给你一个表情. ​ 哈哈哈,开玩笑的~于是,为 ...

  8. 【Pygame实战】打扑克牌嘛?赢了输了?这款打牌游戏,竟让我废寝忘食。

    导语 我小时候能玩的东西,远没有现在这么丰富,打扑克是其中之一. 什么"三打哈"."丰收"."二百四"啊!不知道你们那各种方言玩法都叫啥,我 ...

  9. 不愿意和别人打交道_如果你的交际能力很差,不喜欢与人打交道,这3种职业最适合你...

    现在给个飞速发展的社会,在我们日常生活中交际表达能力非常的重要,但是还是有一部分人比较内向,不善于表达自己的内心,也不喜欢和别人接触,那么这一类人从事哪些行业比较合适呢?下面我就跟大家讨论一下.性格是 ...

最新文章

  1. 网络数据采集与python爬虫_高校邦网络数据采集与Python爬虫答案
  2. 西安电子科技大学计算机全国排名第几,全国五所电子类高校排名,北京邮电大学排名第三...
  3. 一步一步教你如何将 yolov3/yolov4 转为 caffe 模型
  4. PDF下载!《Python十大基础专题》《247个Python综合案例》《Pandas 20页学习笔记》...
  5. ftp连接 java.net.ConnectException: Connection refused
  6. WinForm加载外部类库项目的集成开发模式
  7. SEC SOC Test Board 在WIN 7下的安装
  8. 【linux系统编程】理解冯•诺依曼体系结构
  9. php 数据映射,数据映射模式(Data Mapper)
  10. opencore 启动总是在win_OpenCore引导开机倒计时自动进入指定系统盘,修改默认启动项教程...
  11. 20个值得一看的 JS 代码简写片段
  12. ELK 可视化分析热血电影《长津湖》15万+影评
  13. Laravel 事件监听
  14. 163邮箱登陆写信自动化脚本
  15. 上微信怎么同时用计算机,怎么在电脑上同时登陆两个微信
  16. xingtai -飞机大战2。0
  17. CAD梦想画图中的“绘图工具——圆弧”
  18. Ubuntu 18.04 LTS 安装64位 iNode 客户端
  19. DAEFRHDSGYEVHHQKLVFFAEDV|138648-77-8
  20. 5G网络测速,实在是太快了!

热门文章

  1. 【树的算法】之求分割木板最小开销
  2. 还应该跑马吗?关于运动时间与寿命的(伪)科学分析
  3. 收藏!闲鱼卖货实操,小白轻松入门
  4. 5G QoS控制原理专题详解-基础概念(3)
  5. php5.6解密软件,php解密:php5.4 zend解密核心代码分享
  6. mysql workbench 报 tables could not be fetched.
  7. 淘宝服务器哪个运营商速度快,三大运营商,谁的宽带网速最快?
  8. 主流RGB灯,灯带通用C语言程序
  9. LeetCode1419. 数青蛙
  10. Python爬虫伪装,请求头User-Agent池,和代理IP池搭建使用