大家好,小编来为大家解答以下问题,关于python小游戏的毕业论文,基于python的小游戏毕业设计,现在让我们一起来看看吧!
Python//2048小游戏
这是一篇关于2048小游戏自制记录,用于个人总结与回看PYTHON库“IMITATION”。如果能对你有帮助,我很荣幸```*``
成品效果图
伴随音乐,音量可调Python中的所有运算符号。
0 仍存在的未解决问题
如果有大佬看见了这篇文章,能帮助我解决以下的一些问题,我十分感激。
1、在我电脑上,pygame(1.9.6)只能加载bmp图片格式,但我从查找的资料来看,pygame应该可以读取png jpg等图片格式的。
2、在我用pyinstaller将代码打包为exe文件时,添加-w(使用Windows子系统执行.当程序启动时侯不会打开命令行) 参数会出现错误,出现了我不太懂的一个名词bootloader,报错如下:
3、在我用pyinstaller将代码打包为exe文件时,添加-i(修改exe默认图片)参数,图片十分模糊,且在打包好的文件夹中是正常的,移动到桌面(或者其他目录下)exe图标还是默认图标,十分疑惑。
4、我希望可以监测鼠标的点击位置(我希望是一个图片),但是我在pygame中发现只能(实时监测鼠标位置+鼠标点击事件)同时使用,以到达目的,但效果不好(因为要涉及到整个图片),我不太会操作。
一、写在前面
身为非计算机专业的大一小白,自知代码风格不佳,函数封装冗余,但会努力学习,如果你看我的代码觉得混乱,我十分抱歉。
1、出于Python课程大作业原因,借此机会,完成了我一直想写一个游戏的想法。
2、代码运用到了 numpy,random,pygame,sys库
import numpy as np
import random
import pygame
import sys
二、代码思路与分析
上一张粗略的思维导图
1、初始化部分,就是简单的生成两个4*4矩阵,record1记录上一步操作(希望添加返回上一步的功能,但设计不够完善,有一点小bug,后面会提到),record2记录当前操作,以0表示没有数字。用random.randint(0,9)来生成随机数,用以表示刷新2还是4(比例我设置为9:1)。然后将该数填入矩阵内随机位置即可,这里依然采用randint方式。
2、当发生移动时(上下左右),矩阵应该如何变化?
以向上移动为例说明。首先,排列数字(即不考虑合并),按顺序遍历矩阵,当出现数字时,放在该列最上面,此处顺序指的是:向上移动就是由小到大遍历,向下就是由大到小遍历,核心思想就是,从移动方向开始,寻找数字,并记录次数。排列完成后开始,合并相同的数字(如:4+4 = 8)这里只合并一次(做了适当简化,正常可玩一下2048,感受一下),合并过程为,遍历格子,向四周寻找相同的数字,当找到后,向移动方向合并,并把后续数字想该方向推进,然后跳出循环(这里对后续数字的判断有些冗余,我认为可以更简单,这里先不修改了),其余方向思想相同。
3、刷新矩阵,即产生一个新的数字(2或4)填入矩阵为0部分,因为此处希望可以满足按其他键(非方向键)不刷新的要求,先判断矩阵是否相同,
if not np.array_equal(record2, record1):
如果相同,则不进行刷新。此处刷新大体与初始化的刷新相同,其中一步变化就是需要判断矩阵元素是否为0,这里没有采用遍历方式,具体操作如下:
N = random.choice(np.where(record2.reshape(1, 16) == 0)[1])
Next_cell1_location_raw = N // 4
Next_cell1_location_clo = N
while Next_cell1_location_clo > 3:
Next_cell1_location_clo = Next_cell1_location_clo - 4
record2[Next_cell1_location_raw][Next_cell1_location_clo] = Next_cell1
5、判断游戏结束,当矩阵没有元素为0时,遍历每个格子,向四周寻找相同数字,这里与合并判断一样,不懂赘述。(我写的确实是复杂了/菜)
6、