二十四点小游戏 py小游戏

简介: 二十四点小游戏 py小游戏

二十四点小游戏

玩法:通过加减乘除计算

源代码分享:

import os
import sys
import pygame
from cfg import *
from modules import *
from fractions import Fraction

'''检查控件是否被点击'''
def checkClicked(group, mouse_pos, group_type='NUMBER'):

selected = []
# 数字卡片/运算符卡片
if group_type == GROUPTYPES[0] or group_type == GROUPTYPES[1]:
    max_selected = 2 if group_type == GROUPTYPES[0] else 1
    num_selected = 0
    for each in group:
        num_selected += int(each.is_selected)
    for each in group:
        if each.rect.collidepoint(mouse_pos):
            if each.is_selected:
                each.is_selected = not each.is_selected
                num_selected -= 1
                each.select_order = None
            else:
                if num_selected < max_selected:
                    each.is_selected = not each.is_selected
                    num_selected += 1
                    each.select_order = str(num_selected)
        if each.is_selected:
            selected.append(each.attribute)
# 按钮卡片
elif group_type == GROUPTYPES[2]:
    for each in group:
        if each.rect.collidepoint(mouse_pos):
            each.is_selected = True
            selected.append(each.attribute)
# 抛出异常
else:
    raise ValueError('checkClicked.group_type unsupport %s, expect %s, %s or %s...' % (group_type, *GROUPTYPES))
return selected

'''获取数字精灵组'''
def getNumberSpritesGroup(numbers):

number_sprites_group = pygame.sprite.Group()
for idx, number in enumerate(numbers):
    args = (*NUMBERCARD_POSITIONS[idx], str(number), NUMBERFONT, NUMBERFONT_COLORS, NUMBERCARD_COLORS, str(number))
    number_sprites_group.add(Card(*args))
return number_sprites_group

'''获取运算符精灵组'''
def getOperatorSpritesGroup(operators):

operator_sprites_group = pygame.sprite.Group()
for idx, operator in enumerate(operators):
    args = (*OPERATORCARD_POSITIONS[idx], str(operator), OPERATORFONT, OPREATORFONT_COLORS, OPERATORCARD_COLORS, str(operator))
    operator_sprites_group.add(Card(*args))
return operator_sprites_group

'''获取按钮精灵组'''
def getButtonSpritesGroup(buttons):

button_sprites_group = pygame.sprite.Group()
for idx, button in enumerate(buttons):
    args = (*BUTTONCARD_POSITIONS[idx], str(button), BUTTONFONT, BUTTONFONT_COLORS, BUTTONCARD_COLORS, str(button))
    button_sprites_group.add(Button(*args))
return button_sprites_group

'''计算'''
def calculate(number1, number2, operator):

operator_map = {'+': '+', '-': '-', '×': '*', '÷': '/'}
try:
    result = str(eval(number1+operator_map[operator]+number2))
    return result if '.' not in result else str(Fraction(number1+operator_map[operator]+number2))
except:
    return None

'''在屏幕上显示信息'''
def showInfo(text, screen):

rect = pygame.Rect(200, 180, 400, 200)
pygame.draw.rect(screen, PAPAYAWHIP, rect)
font = pygame.font.Font(FONTPATH, 40)
text_render = font.render(text, True, BLACK)
font_size = font.size(text)
screen.blit(text_render, (rect.x+(rect.width-font_size[0])/2, rect.y+(rect.height-font_size[1])/2))

'''主函数'''
def main():

# 初始化, 导入必要的游戏素材
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode(SCREENSIZE)
pygame.display.set_caption('24 point —— 九歌')
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 = False
while 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.attribute
                elif each.select_order == '2':
                    selected_number2 = ea
目录
相关文章
|
7月前
|
开发者 Python
小游戏实战丨基于Tkinter的五子棋小游戏
小游戏实战丨基于Tkinter的五子棋小游戏
107 4
|
8月前
|
程序员 C# Python
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码(2)
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码(2)
|
8月前
|
存储 程序员 C#
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码
100行python代码,轻松完成贪吃蛇小游戏_c#游戏100行代码
|
8月前
|
存储 Python
10分钟教你用Python写一个贪吃蛇小游戏,适合练手项目
10分钟教你用Python写一个贪吃蛇小游戏,适合练手项目
221 0
|
Python
python小游戏——贪吃蛇游戏
python小游戏——贪吃蛇游戏
147 0
|
Python
python彩图版飞机大战小游戏程序源码
python彩图版飞机大战小游戏程序源码
256 0
|
Python
python小游戏——塔防小游戏代码开源
python小游戏——塔防小游戏代码开源
483 0
python小游戏——塔防小游戏代码开源
|
Python
14个py小游戏
前言 大家好,我是辣条哥 鉴于之前发布的:《30个Python小游戏,上班摸鱼我能玩一天【内附源码】》不少人都直呼不过瘾,还有人说不够详细。所以今天特意给大家讲讲大型游戏中的一些细枝末节:大型游戏的爆炸效果怎么实现的~ 目录 前言 1.效果流程(思路)(游戏素材) 2.游戏代码 第一步(依次拿到图片) 第二步(新建游戏对象) 第三步(爆炸) 第四步(随机位置爆炸) 最终效果视频 1.效果流程(思路)(游戏素材) 2.游戏代码 第一步(依次拿到图片) 思路:先把6张图片的路径依次遍历(利用字符串的格式化输出) frs = [f'exp/{i}.gif' for i in
218 0
|
Python
11平衡木 py小游戏
11平衡木
265 0
|
Python
贪吃蛇 py小游戏
贪吃蛇 py小游戏
177 0

热门文章

最新文章

相关实验场景

更多
下一篇
开通oss服务