导航:首页 > 编程语言 > 简明python游戏代码

简明python游戏代码

发布时间:2022-12-15 20:00:07

‘壹’ 100行python代码,轻松完成贪吃蛇小游戏

你是想让我们向你提问题?你这个放错地方了,应该发布到自己的博客或论坛上面才对

‘贰’ Python游戏开发,Python实现贪吃蛇小游戏与吃豆豆 附带源码

Python版本: 3.6.4

相关模块:

pygame模块;

以及一些Python自带的模块。

安装Python并添加到环境变量,pip安装需要的相关模块即可。

贪吃蛇的 游戏 规则应该不需要我多做介绍了吧T_T。写个贪吃蛇 游戏 其实还是很简单的。首先,我们进行一下 游戏 初始化:

然后定义一个贪吃蛇类:

其中head_coord用来记录蛇头所在位置,而tail_coords是一个二维数组,用来记录所有蛇身的位置。一开始,贪吃蛇长为3,并且位置是随机生成的。用户通过 键来控制贪吃蛇的行动:

需要注意的是,贪吃蛇不能180 大拐弯,只能90 地拐弯。例如正在向左行动的贪吃蛇不能瞬间变成向右行动。具体而言,代码实现如下:

然后,我们需要随机生成一个食物,且需要保证该食物的位置不与贪吃蛇的位置相同:

在更新贪吃蛇的时候,如果它吃到了食物,则蛇身长加一,否则只是简单的按照给定的方向行动而不改变蛇身长度:

同时,当贪吃蛇吃到食物时,需要重新生成一个新的食物:

最后,当贪吃蛇碰到墙壁或者蛇头碰到蛇身时, 游戏 结束:

并显示一下 游戏 结束界面:

玩家通过 键控制 游戏 的主角吃豆人吃掉藏在迷宫内的所有豆子,并且不能被鬼魂抓到。

若能顺利吃完迷宫内的所有豆子并且不被鬼魂抓到,则 游戏 胜利,否则 游戏 失败。

逐步实现:

Step1:定义 游戏 精灵类

首先,让我们先来明确一下该 游戏 需要哪些 游戏 精灵类。

① 墙类

② 食物类(即豆豆)

③ 角色类

角色类包括吃豆人和鬼魂,鬼魂由电脑控制其运动轨迹,吃豆人由玩家控制其运动轨迹。

显然,其均需具备更新角色位置和改变角色运动方向的能力,其源代码如下:

Step2:设计 游戏 地图

利用Step1中定义的 游戏 精灵类,我们就可以开始设计 游戏 地图了。由于时间有限,我只写了一个关卡的 游戏 地图,有兴趣的小伙伴可以在此基础上进行扩展(在我的源代码基础上进行扩展是很方便滴~)。 游戏 地图的设计包括以下四方面内容:

① 创建墙

② 创建门(一开始关幽灵用的)

image.gif

③ 创建角色

④ 创建食物

因为食物不能和墙、门以及角色的位置重叠,所以为了方便设计 游戏 地图,要先创建完墙、门以及角色后再创建食物:

Step3:设计 游戏 主循环

接下来开始设计 游戏 主循环。首先是初始化:

然后定义主函数:

其中startLevelGame函数用于开始某一关 游戏 ,其源代码如下:

showText函数用于在 游戏 结束或关卡切换时在 游戏 界面中显示提示性文字,其源代码如下:


‘叁’ 求Python大神给个200行左右的代码,多点注释,做期末大作业

#-*-coding:utf-8-*-

importcurses#引入curses模块,curses是一个在Linux/Unix下广泛应用的图形函数库.,作用是可以绘制在DOS下的用户界面和漂亮的图形。
fromrandomimportrandrange,choice#从random模块引入randrange,choice这两个类
#从collections引入defaultdict这个类

letter_codes=[ord(ch)forchin'WASDRQwasdrq']#ord函数是把字符转换成对应的数字
actions=['Up','Left','Down','Right','Restart','Exit']#上,左,下,右,重启,退出
actions_dict=dict(zip(letter_codes,actions*2))#把字母与动作对应起来。zip是把元组中的值对应起来。

#############################
WUp
ALeft
SDown
DRight
RRestart
QExit

wUp
aLeft
sDown
dRight
rRestart
QExit
##############################################
defget_user_action(keyboard):
char="N"#char的初始值为Nwhilecharnotinactions_dict:
char=keyboard.getch()returnactions_dict[char]#阻塞+循环,直到获得用户有效输入才返回对应行为deftranspose(field):return[list(row)forrowinzip(*field)]#zip函数里边加*号,是把行变列,列变行。所以这句代码是行列转置definvert(field):return[row[::-1]forrowinfield]#这句代码是把列表前后颠倒classGameField(object):#创建一个叫做GameField的类,用来创建棋盘def__init__(self,height=4,width=4,win=2048):这个类三个参数self.height=height#高self.width=width#宽self.win_value=win#过关分数self.score=0#当前分数self.highscore=0#最高分self.reset()#重置棋盘defreset(self):#定义一个reset函数ifself.score>self.highscore:#如果当前分数大于最高分,那么把当前分数赋值给最高分self.highscore=self.scoreself.score=0#当前分数恢复到0分self.field=[[0foriinrange(self.width)]forjinrange(self.height)]#横纵坐标恢复到(0,0)self.spawn()#调用spawn这个函数self.spawn()defmove(self,direction):#定义move函数defmove_row_left(row):#向左移deftighten(row):#squeesenon-zeroelementstogether把零散的非零单元挤到一块
new_row=[iforiinrowifi!=0]#如果i不等于零,把他们赋值到new_row这个元组中
new_row+=[0foriinrange(len(row)-len(new_row))]#其余位置用0补充returnnew_row#返回这个元组defmerge(row):#定义merge函数,用来合并单元
pair=False#pair初始值为假
new_row=[]#new_row初始值为空foriinrange(len(row)):#让i在格子里循环ifpair:如果pair为真
new_row.append(2*row[i])#那么把把row【i】的值乘以2,追加到new_row后边self.score+=2*row[i]#并且得分为row【i】的值乘以2
pair=False#pair重新赋值为假else:如果pair为真ifi+1<len(row)androw[i]==row[i+1]:#如果i+1还没到边界,并且此时的row【i】=row【i+1】
pair=True#那么pair为真
new_row.append(0)#new_row后追加零else:
new_row.append(row[i])#否则追加row【i】
assertlen(new_row)==len(row)#提醒两者长度一致returnnew_rowreturntighten(merge(tighten(row)))#反复合并,知道不能合并为止

moves={}
moves['Left']=lambdafield:
[move_row_left(row)forrowinfield]#做移动
moves['Right']=lambdafield:
invert(moves['Left'](invert(field)))#invert是逆转
moves['Up']=lambdafield:
transpose(moves['Left'](transpose(field)))#transpose是转置
moves['Down']=lambdafield:
transpose(moves['Right'](transpose(field)))ifdirectioninmoves:ifself.move_is_possible(direction):#如果移动方向在四个方向上,self.field=moves[direction](self.field)那么调用moves函数self.spawn()#产生随机数returnTrueelse:returnFalsedefis_win(self):returnany(any(i>=self.win_valueforiinrow)forrowinself.field)defis_gameover(self):returnnotany(self.move_is_possible(move)formoveinactions)defdraw(self,screen):
help_string1='(W)Up(S)Down(A)Left(D)Right'
help_string2='(R)Restart(Q)Exit'
gameover_string='GAMEOVER'
win_string='YOUWIN!'defcast(string):
screen.addstr(string+' ')defdraw_hor_separator():
line='+'+('+------'*self.width+'+')[1:]
separator=defaultdict(lambda:line)ifnothasattr(draw_hor_separator,"counter"):
draw_hor_separator.counter=0
cast(separator[draw_hor_separator.counter])
draw_hor_separator.counter+=1defdraw_row(row):
cast(''.join('|{:^5}'.format(num)ifnum>0else'|'fornuminrow)+'|')

screen.clear()
cast('SCORE:'+str(self.score))if0!=self.highscore:
cast('HGHSCORE:'+str(self.highscore))forrowinself.field:
draw_hor_separator()
draw_row(row)
draw_hor_separator()ifself.is_win():
cast(win_string)else:ifself.is_gameover():
cast(gameover_string)else:
cast(help_string1)
cast(help_string2)defspawn(self):
new_element=4ifrandrange(100)>89else2
(i,j)=choice([(i,j)foriinrange(self.width)forjinrange(self.height)ifself.field[i][j]==0])self.field[i][j]=new_elementdefmove_is_possible(self,direction):defrow_is_left_movable(row):
defchange(i):#trueifthere'llbechangeini-thtileifrow[i]==0androw[i+1]!=0:#MovereturnTrueifrow[i]!=0androw[i+1]==row[i]:#(change(i)foriinrange(len(row)-1))

check={}
check['Left']=lambdafield:
any(row_is_left_movable(row)forrowinfield)

check['Right']=lambdafield:
check['Left'](invert(field))

check['Up']=lambdafield:
check['Left'](transpose(field))

check['Down']=lambdafield:
check['Right'](transpose(field))ifdirectionincheck:returncheck[direction](self.field)else:returnFalsedefmain(stdscr):definit():#重置游戏棋盘
game_field.reset()return'Game'defnot_game(state):#画出GameOver或者Win的界面
game_field.draw(stdscr)#读取用户输入得到action,判断是重启游戏还是结束游戏
action=get_user_action(stdscr)
responses=defaultdict(lambda:state)#默认是当前状态,没有行为就会一直在当前界面循环
responses['Restart'],responses['Exit']='Init','Exit'#对应不同的行为转换到不同的状态returnresponses[action]defgame():#画出当前棋盘状态
game_field.draw(stdscr)#读取用户输入得到action
action=get_user_action(stdscr)ifaction=='Restart':return'Init'ifaction=='Exit':return'Exit'ifgame_field.move(action):#movesuccessfulifgame_field.is_win():return'Win'ifgame_field.is_gameover():return'Gameover'return'Game'


state_actions={'Init':init,'Win':lambda:not_game('Win'),'Gameover':lambda:not_game('Gameover'),'Game':game
}

curses.use_default_colors()
game_field=GameField(win=32)


state='Init'#状态机开始循环whilestate!='Exit':
state=state_actions[state]()

curses.wrapper(main)

‘肆’ 求简洁优美的python代码例子、片段、参考资料

楼主贴的那段代码好像是我写的那段吧,我来告诉你如何写出来的吧

首先我不是高手,我也没有人教,我的编程都是自学的,我只是一个业余爱好者.

写出这样的代码很简单,就是要多练,我只是把python的基本语法学会,然后就不停地练习,我没有看过楼上的那些资料,我只是不停地码代码,或许有捷径,但是我没有发现.

我从07年开始写python的脚本,我一开始的代码风格也很差,特别是我先学c++,然后再转python的,当写的代码越来越多,对python的了解就会加深,代码风格也会自动改变的,不需要着急,其实这就是对一门语言的了解程度,你可以看看我回答的问题,我的回答就是我对python的理解,如果你能坚持下来,相信7年后你写的代码会比我写得更好.



楼上的题目有点意思,我也写一下,不知道对否

s='''
TheZenofPython,byTimPeters

Beautifulisbetterthanugly.
Explicitisbetterthanimplicit.
Simpleisbetterthancomplex.
.
Flatisbetterthannested.
Sparseisbetterthandense.
Readabilitycounts.
Specialcasesaren'tspecialenoughtobreaktherules.
.
Errorsshouldneverpasssilently.
Unlessexplicitlysilenced.
Inthefaceofambiguity,refusethetemptationtoguess.
Thereshouldbeone--andpreferablyonlyone--obviouswaytodoit.
'reDutch.
Nowisbetterthannever.
*right*now.
,it'sabadidea.
,itmaybeagoodidea.
--let'sdomoreofthose!
'''

importre,collections
tail_map={"'s":'is',"'re":'are',"n't":'not'}
data=collections.Counter(re.findall('w+',re.sub("('s|'re|n't)",lambdamatchobj:tail_map[matchobj.group()],s.lower())))

max_len=max(data.values())
print('Totalwordcount:%d',sum(data.values()))

forwordinsorted(data):
print('%*s=>%d'%(max_len,word,data[word]))

‘伍’ 拜托谁给我发一个python 代码, 是关于数学类的小游戏,拜托了!

Ubuntu下的,不知和powershell有区别没

#!/usr/bin/python
# Filename: guessTheNumber.py
import random

target = random.randint(1,100)

while True:
guess = int(raw_input('Enter an integer:'))
if(guess==target):
print 'You caught the target.'
break
elif guess < target:
print 'a little higher than that.'
else:
print 'a little lower than that'

‘陆’ 求python做一个简易的扫雷游戏代码,急求,大家帮帮忙,没有扫雷,小游戏也行,不要超过150行的

高度(H):24
宽度(W):30
雷数(M):10

‘柒’ python有趣的编程代码

classPoint:
row=0
col=0
def__init__(self,row,col):
self.row=row
self.col=col

def(self):
returnPoint(row=self.row,col=self.col)


#初始框架
importpygame
importrandom

#初始化
pygame.init()
W=800
H=600

ROW=30
COL=40

size=(W,H)
window=pygame.display.set_mode(size)
pygame.display.set_caption('贪吃蛇')

bg_color=(255,255,255)
snake_color=(200,200,200)

head=Point(row=int(ROW/2),col=int(COL/2))
head_color=(0,128,128)

snakes=[
Point(row=head.row,col=head.col+1),
Point(row=head.row,col=head.col+2),
Point(row=head.row,col=head.col+3)
]

#生成食物
defgen_food():
while1:
pos=Point(row=random.randint(0,ROW-1),col=random.randint(0,COL-1))

#
is_coll=False

#是否跟蛇碰上了
ifhead.row==pos.rowandhead.col==pos.col:
is_coll=True

#蛇身子
forsnakeinsnakes:
ifsnake.row==pos.rowandsnake.col==pos.col:
is_coll=True
break

ifnotis_coll:
break

returnpos


#定义坐标


food=gen_food()
food_color=(255,255,0)direct='left'#left,right,up,down

#
defrect(point,color):
cell_width=W/COL
cell_height=H/ROW

left=point.col*cell_width
top=point.row*cell_height

pygame.draw.rect(
window,color,
(left,top,cell_width,cell_height)
)
pass

#游戏循环
quit=True
clock=pygame.time.Clock()
whilequit:
#处理事件
foreventinpygame.event.get():
ifevent.type==pygame.QUIT:
quit=False
elifevent.type==pygame.KEYDOWN:
ifevent.key==273orevent.key==119:
ifdirect=='left'ordirect=='right':
direct='up'
elifevent.key==274orevent.key==115:
ifdirect=='left'ordirect=='right':
direct='down'
elifevent.key==276orevent.key==97:
ifdirect=='up'ordirect=='down':
direct='left'
elifevent.key==275orevent.key==100:
ifdirect=='up'ordirect=='down':
direct='right'

#吃东西
eat=(head.row==food.rowandhead.col==food.col)

#重新产生食物
ifeat:
food=gen_food()

#处理身子
#1.把原来的头,插入到snakes的头上
snakes.insert(0,head.())
#2.把snakes的最后一个删掉
ifnoteat:
snakes.pop()

#移动
ifdirect=='left':
head.col-=1
elifdirect=='right':
head.col+=1
elifdirect=='up':
head.row-=1
elifdirect=='down':
head.row+=1

#检测
dead=False
#1.撞墙
ifhead.col<0orhead.row<0orhead.col>=COLorhead.row>=ROW:
dead=True

#2.撞自己
forsnakeinsnakes:
ifhead.col==snake.colandhead.row==snake.row:
dead=True
break

ifdead:
print('死了')
quit=False

#渲染——画出来
#背景
pygame.draw.rect(window,bg_color,(0,0,W,H))

#蛇头
forsnakeinsnakes:
rect(snake,snake_color)
rect(head,head_color)
rect(food,food_color)

#
pygame.display.flip()

#设置帧频(速度)
clock.tick(8)

#收尾工作

这是一个简易版贪吃蛇的代码,虽然结构简单,但是该有的功能都是完整的,可玩性也不错

‘捌’ 求简单Python程序代码

k=0
while k>=0:
if 5**(3**k)%2 == 3:
print(k)
break
k += 1

阅读全文

与简明python游戏代码相关的资料

热点内容
dvd光盘存储汉子算法 浏览:758
苹果邮件无法连接服务器地址 浏览:963
phpffmpeg转码 浏览:672
长沙好玩的解压项目 浏览:145
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:737
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:486
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:383
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:350
风翼app为什么进不去了 浏览:779
im4java压缩图片 浏览:362
数据查询网站源码 浏览:151
伊克塞尔文档怎么进行加密 浏览:893
app转账是什么 浏览:163