Python小游戏2023兔年吉祥,祝大家辞旧迎新,前兔无量啦~兔年都在玩的这两款游戏,只有0.1%的人通关,你玩了吗?(内含福利源码)
Posted 嗨!栗子同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python小游戏2023兔年吉祥,祝大家辞旧迎新,前兔无量啦~兔年都在玩的这两款游戏,只有0.1%的人通关,你玩了吗?(内含福利源码)相关的知识,希望对你有一定的参考价值。
前言
HAPPY NEW YEAR——2023🐇年吉祥☀
🌙🌙🌙🌙🌙🌙除夕辞旧迎新🌙🌙🌙🌙🌙🌙
++ 新年快乐 钱🐇无量 ++
所有文章完整的素材+源码都在👇👇
当和家人围坐一席、觥筹交错举杯庆祝时,就轮到要说祝福语了~~
这时的你,是不是经常大脑一片空白?只能从嘴里蹦出为数不多的几个字:吃好喝好!
PS:兔年祝福——含“兔”的四字词语
大展宏“兔” 前“兔”似锦——“兔”步青云 前“兔”无量
“兔”然暴富 “兔”来运转——扬眉“兔”气 “兔”飞猛进
奋发“兔”强 钱“兔”无忧——全新“兔”破 谈“兔”不凡
“兔”出贡献 好事成“兔”——金兔送福 兔年大吉
今天来给大家来两款Python适合兔年玩儿的小游戏——《前途似锦消消消》寓意前路坦荡,更
上一层楼哦;另一款《兔年吉祥拼拼拼》寓意2023年心想事成,所愿皆成真!
正文
Hi,兄弟姐妹们好,我是栗子~
新年新气象!咱们不仅要自己穿得漂亮,也得给手机来个新壁纸!这两天我在网上冲浪的时
候,发现各种新年壁纸真的是绝绝子。
所以,今天木子就给你们整理了超多张「新年壁纸」,做微信聊天背景也超赞!还不赶紧来get
~(仅几张展示,大部分的可以找我拿蛮,毕竟文章内容主次还是要分清滴 哈哈)
在写代码之前插播几张新年壁纸,嘿嘿,希望大家喜欢啦💌💌
一、《前途似锦消消消》Pygame游戏代码
1)🐰新年祝福壁纸✨
👆过年嘛,那自然是要讨句吉祥话,这样新的一年才能红红火火!
👆姐妹们记得把闺蜜&男朋友薅出来一起换壁纸呀!
👆春联和福字除了贴在家里,当然也能贴在手机上哦~
2)开发环境
小编使用的环境:Python3、Pycharm社区版、pygame模块需要安装,其他自带的模块就不
一一 展示啦。
镜像源方法—模块安装:pip install -i https://pypi.douban.com/simple/+模块名
3)代码展示
主程序:
import os
import sys
import cfg
import pygame
from modules import *
'''游戏主程序'''
def main():
pygame.init()
screen = pygame.display.set_mode(cfg.SCREENSIZE)
pygame.display.set_caption('前兔似锦消消消🥕🥕')
# 加载背景音乐
pygame.mixer.init()
pygame.mixer.music.load(os.path.join(cfg.ROOTDIR, "resources/audios/bg.mp3"))
pygame.mixer.music.set_volume(0.6)
pygame.mixer.music.play(-1)
# 加载音效
sounds =
sounds['mismatch'] = pygame.mixer.Sound(os.path.join(cfg.ROOTDIR, 'resources/audios/badswap.wav'))
sounds['match'] = []
for i in range(6):
sounds['match'].append(pygame.mixer.Sound(os.path.join(cfg.ROOTDIR, 'resources/audios/match%s.wav' % i)))
# 加载字体
font = pygame.font.Font(os.path.join(cfg.ROOTDIR, 'resources/font/font.TTF'), 25)
# 图片加载
gem_imgs = []
for i in range(1, 8):
gem_imgs.append(os.path.join(cfg.ROOTDIR, 'resources/images/gem%s.png' % i))
# 主循环
game = gemGame(screen, sounds, font, gem_imgs, cfg)
while True:
score = game.start()
flag = False
# 一轮游戏结束后玩家选择重玩或者退出
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT or (event.type == pygame.KEYUP and event.key == pygame.K_ESCAPE):
pygame.quit()
sys.exit()
elif event.type == pygame.KEYUP and event.key == pygame.K_r:
flag = True
if flag:
break
screen.fill((135, 206, 235))
text0 = 'Final score: %s' % score
text1 = 'Press <R> to restart the game.'
text2 = 'Press <Esc> to quit the game.'
y = 150
for idx, text in enumerate([text0, text1, text2]):
text_render = font.render(text, 1, (85, 65, 0))
rect = text_render.get_rect()
if idx == 0:
rect.left, rect.top = (212, y)
elif idx == 1:
rect.left, rect.top = (122.5, y)
else:
rect.left, rect.top = (126.5, y)
y += 100
screen.blit(text_render, rect)
pygame.display.update()
game.reset()
'''run'''
if __name__ == '__main__':
main()
4)效果展示
🐇这么多的兔兔,有没有感觉头开始晕起来了,2333
不知道你怎么样了。反正我是玩儿的时候脑瓜子嗡嗡的!
二、《兔年吉祥拼拼拼》Pygame游戏代码
1)🐰治愈系兔兔壁纸✨
👇新的一年要前途无量呀~
每年年初都是大家立flag的时候,虽然大概也许并不能达成,但至少换个壁纸以表决心!
2)开发环境
小编使用的环境:Python3、Pycharm社区版、pygame模块需要安装,其他自带的模块就不
一一 展示啦。
镜像源方法—模块安装:pip install -i https://pypi.douban.com/simple/+模块名
3)代码展示
主程序:
import os
import sys
import cfg
import random
import pygame
'''判断游戏是否结束'''
def isGameOver(board, size):
assert isinstance(size, int)
num_cells = size * size
for i in range(num_cells-1):
if board[i] != i: return False
return True
'''将空白Cell左边的Cell右移到空白Cell位置'''
def moveR(board, blank_cell_idx, num_cols):
if blank_cell_idx % num_cols == 0: return blank_cell_idx
board[blank_cell_idx-1], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx-1]
return blank_cell_idx - 1
'''将空白Cell右边的Cell左移到空白Cell位置'''
def moveL(board, blank_cell_idx, num_cols):
if (blank_cell_idx+1) % num_cols == 0: return blank_cell_idx
board[blank_cell_idx+1], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx+1]
return blank_cell_idx + 1
'''将空白Cell上边的Cell下移到空白Cell位置'''
def moveD(board, blank_cell_idx, num_cols):
if blank_cell_idx < num_cols: return blank_cell_idx
board[blank_cell_idx-num_cols], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx-num_cols]
return blank_cell_idx - num_cols
'''将空白Cell下边的Cell上移到空白Cell位置'''
def moveU(board, blank_cell_idx, num_rows, num_cols):
if blank_cell_idx >= (num_rows-1) * num_cols: return blank_cell_idx
board[blank_cell_idx+num_cols], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx+num_cols]
return blank_cell_idx + num_cols
'''获得打乱的拼图'''
def CreateBoard(num_rows, num_cols, num_cells):
board = []
for i in range(num_cells): board.append(i)
# 去掉右下角那块
blank_cell_idx = num_cells - 1
board[blank_cell_idx] = -1
for i in range(cfg.NUMRANDOM):
# 0: left, 1: right, 2: up, 3: down
direction = random.randint(0, 3)
if direction == 0: blank_cell_idx = moveL(board, blank_cell_idx, num_cols)
elif direction == 1: blank_cell_idx = moveR(board, blank_cell_idx, num_cols)
elif direction == 2: blank_cell_idx = moveU(board, blank_cell_idx, num_rows, num_cols)
elif direction == 3: blank_cell_idx = moveD(board, blank_cell_idx, num_cols)
return board, blank_cell_idx
'''随机选取一张图片'''
def GetImagePath(rootdir):
imagenames = os.listdir(rootdir)
assert len(imagenames) > 0
return os.path.join(rootdir, random.choice(imagenames))
'''显示游戏结束界面'''
def ShowEndInterface(screen, width, height):
screen.fill(cfg.BACKGROUNDCOLOR)
font = pygame.font.Font(cfg.FONTPATH, width//15)
title = font.render('恭喜! 你成功完成了拼图!', True, (233, 150, 122))
rect = title.get_rect()
rect.midtop = (width/2, height/2.5)
screen.blit(title, rect)
pygame.display.update()
while True:
for event in pygame.event.get():
if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
pygame.quit()
sys.exit()
pygame.display.update()
'''显示游戏开始界面'''
def ShowStartInterface(screen, width, height):
screen.fill(cfg.BACKGROUNDCOLOR)
tfont = pygame.font.Font(cfg.FONTPATH, width//4)
cfont = pygame.font.Font(cfg.FONTPATH, width//20)
title = tfont.render('兔年吉祥', True, cfg.RED)
content1 = cfont.render('前兔似锦,大展宏兔', True, cfg.BLUE)
content2 = cfont.render('按H、M、L开始游戏', True, cfg.BLUE)
trect = title.get_rect()
trect.midtop = (width/2, height/10)
crect1 = content1.get_rect()
crect1.midtop = (width/2, height/2.2)
crect2 = content2.get_rect()
crect2.midtop = (width/2, height/1.8)
screen.blit(title, trect)
screen.blit(content1, crect1)
screen.blit(content2, crect2)
while True:
for event in pygame.event.get():
if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == ord('l'): return 3
elif event.key == ord('m'): return 4
elif event.key == ord('h'): return 5
pygame.display.update()
'''主函数'''
def main():
# 初始化
pygame.init()
clock = pygame.time.Clock()
# 加载图片
game_img_used = pygame.image.load(GetImagePath(cfg.PICTURE_ROOT_DIR))
game_img_used = pygame.transform.scale(game_img_used, cfg.SCREENSIZE)
game_img_used_rect = game_img_used.get_rect()
# 设置窗口
screen = pygame.display.set_mode(cfg.SCREENSIZE)
pygame.display.set_caption('兔年吉祥小游戏')
# 游戏开始界面
size = ShowStartInterface(screen, game_img_used_rect.width, game_img_used_rect.height)
assert isinstance(size, int)
num_rows, num_cols = size, size
num_cells = size * size
# 计算Cell大小
cell_width = game_img_used_rect.width // num_cols
cell_height = game_img_used_rect.height // num_rows
# 避免初始化为原图
while True:
game_board, blank_cell_idx = CreateBoard(num_rows, num_cols, num_cells)
if not isGameOver(game_board, size):
break
# 游戏主循环
is_running = True
while is_running:
# --事件捕获
for event in pygame.event.get():
# ----退出游戏
if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
pygame.quit()
sys.exit()
# ----键盘操作
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT or event.key == ord('a'):
blank_cell_idx = moveL(game_board, blank_cell_idx, num_cols)
elif event.key == pygame.K_RIGHT or event.key == ord('d'):
blank_cell_idx = moveR(game_board, blank_cell_idx, num_cols)
elif event.key == pygame.K_UP or event.key == ord('w'):
blank_cell_idx = moveU(game_board, blank_cell_idx, num_rows, num_cols)
elif event.key == pygame.K_DOWN or event.key == ord('s'):
blank_cell_idx = moveD(game_board, blank_cell_idx, num_cols)
# ----鼠标操作
elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
x, y = pygame.mouse.get_pos()
x_pos = x // cell_width
y_pos = y // cell_height
idx = x_pos + y_pos * num_cols
if idx == blank_cell_idx-1:
blank_cell_idx = moveR(game_board, blank_cell_idx, num_cols)
elif idx == blank_cell_idx+1:
blank_cell_idx = moveL(game_board, blank_cell_idx, num_cols)
elif idx == blank_cell_idx+num_cols:
blank_cell_idx = moveU(game_board, blank_cell_idx, num_rows, num_cols)
elif idx == blank_cell_idx-num_cols:
blank_cell_idx = moveD(game_board, blank_cell_idx, num_cols)
# --判断游戏是否结束
if isGameOver(game_board, size):
game_board[blank_cell_idx] = num_cells - 1
is_running = False
# --更新屏幕
screen.fill(cfg.BACKGROUNDCOLOR)
for i in range(num_cells):
if game_board[i] == -1:
continue
x_pos = i // num_cols
y_pos = i % num_cols
rect = pygame.Rect(y_pos*cell_width, x_pos*cell_height, cell_width, cell_height)
img_area = pygame.Rect((game_board[i]%num_cols)*cell_width, (game_board[i]//num_cols)*cell_height, cell_width, cell_height)
screen.blit(game_img_used, rect, img_area)
for i in range(num_cols+1):
pygame.draw.line(screen, cfg.BLACK, (i*cell_width, 0), (i*cell_width, game_img_used_rect.height))
for i in range(num_rows+1):
pygame.draw.line(screen, cfg.BLACK, (0, i*cell_height), (game_img_used_rect.width, i*cell_height))
pygame.display.update()
clock.tick(cfg.FPS)
# 游戏结束界面
ShowEndInterface(screen, game_img_used_rect.width, game_img_used_rect.height)
'''run'''
if __name__ == '__main__':
main()
4)效果展示
🐇随机效果展示最简单的模式👇
🐇随机效果展示中级难度模式👇
🐇随机效果展示最后一关模式👇
总结
🧧好啦今天内容and壁纸就到这里~
记得分享给你的闺蜜&对象,一起学习一起换壁纸哦!❤️
✨完整的素材源码等:可以滴滴我吖!或者点击文末hao自取免费拿的哈~
🔨推荐往期文章——
项目4.4 【Pygame实战】这两款脑洞大开的文字剧情版游戏,99% 的人打了五星好评-《巨龙之洞》-《太空矿工》
项目0.6 【Python实战项目】做一个 刮刮乐 案例,一不小心....着实惊艳到我了。
项目0.3 【Pygamre实战】2023人气超高的模拟经营类游戏:梦想小镇代码版火爆全场,免费体验分享下载哦~
项目0.1 宝藏拼图神秘上线,三种玩法刷爆朋友圈—玩家直呼太上瘾了。
项目0.2 【Pygame小游戏】Python版有迷宫嘛?原来藏在个地方呀~
🎁文章汇总——
Python文章合集 | (入门到实战、游戏、Turtle、案例等)
(文章汇总还有更多你案例等你来学习啦~源码找我即可免费!)
送给大家的春节祝福
各们看官们,今天是除夕,在这辞旧迎新之日。我们提前祝大家春节快乐!身体健康!同时感谢大家在过去的一年中对我的支持与关注。在新的一年中,我将再接再厉为大家创作更加优质的博客。让我们携手共进共创美好的未来。
以上是关于Python小游戏2023兔年吉祥,祝大家辞旧迎新,前兔无量啦~兔年都在玩的这两款游戏,只有0.1%的人通关,你玩了吗?(内含福利源码)的主要内容,如果未能解决你的问题,请参考以下文章