分享

python.pygame小例----本人制作的丑挫坦克大战

 小小锐DarkRose 2014-08-20
 



这是游戏截图,是不是很挫!哈哈,本人python游戏处女作,望请谅解:

  
 
 代码量:400行

 图片源:用win7自带画图软件----(附件下)图画所画:
 
 
各图片及命名如上图所示。如果想运行本文所展示的代码,可照下列步骤:
一、依葫芦画瓢,照上图所示,使用win7自带图画工具进行制作,命名依据图片中所示(其中命名中带截图二字的图片),保存目录为D:\tank\
二、copy下述代码至python编辑器(版本为2.7,必须要有pygame库),然后运行(注意缩进),即可。
代码如下:

import pygame
from pygame.locals import *
from sys import exit
import random
import time
pygame.init()

screen = pygame.display.set_mode((640, 480), 0, 32)
color0=(0,0,0)
color1=(127,1,7)
class block_point:
def __init__(self,name,pos):
self.name =  name
self.xpos =  pos[0]
self.ypos =  pos[1]
def born_out(self):
pygame.draw.line(screen, color1, (self.xpos,self.ypos),(self.xpos+24,self.ypos),24)
def die(self):
pygame.draw.line(screen, color0, (self.xpos,self.ypos),(self.xpos+24,self.ypos),24)

map_1=block_point('1',(0,240))
map_2=block_point('2',(24,240))
map_3=block_point('3',(48,240))
map_4=block_point('4',(72,240))
map_5=block_point('5',(96,240))
map_6=block_point('6',(120,240))
map_7=block_point('7',(144,240))
map_8=block_point('8',(168,240))
map_9=block_point('9',(192,240))
map_10=block_point('10',(216,240))
map_11=block_point('11',(640-0,240))
map_12=block_point('12',(640-24,240))
map_13=block_point('13',(640-48,240))
map_14=block_point('14',(640-72,240))
map_15=block_point('15',(640-96,240))
map_16=block_point('16',(640-120,240))
map_17=block_point('17',(640-144,240))
map_18=block_point('18',(640-168,240))
map_19=block_point('19',(640-192,240))
map_20=block_point('20',(640-216,240))

ini_done=False
class paodan:
paodan_jiazu=range(1000)
paodan_num=0
paodan_posx=range(1000)
paodan_posy=range(1000)
def __init__(self,st,pos,dir_0n):
self.st=st
self.pos=pos
self.dir_0n=dir_0n
self.surface_1=pygame.image.load('D:\\tank\\paodan.jpg').convert()
self.surface_2=pygame.image.load('D:\\tank\\paodanmeile.jpg').convert()
paodan.paodan_num=zidan.zidan_num+1
paodan.paodan_jiazu[st]=st
paodan.paodan_posx[st]=pos[0]
paodan.paodan_posy[st]=pos[1]
def flyaway(self):
if self.dir_0n==1:
self.pos[1]-=20
elif self.dir_0n==2:
self.pos[0]+=20
elif self.dir_0n==3:
self.pos[1]+=20
elif self.dir_0n==4:
self.pos[0]-=20
class zidan:
zidan_jiazu=range(1000)
zidan_num=0
reg_posx=range(1000)
reg_posy=range(1000)
def __init__(self,name,pos,dir_0n):
self.name=name
self.pos=pos
self.dir_0n=dir_0n
self.surface_2=pygame.image.load('D:\\tank\\zidan.jpg').convert()
self.surface_3=pygame.image.load('D:\\tank\\zidanbujianle.jpg').convert()
zidan.zidan_num=zidan.zidan_num+1
zidan.zidan_jiazu[name]=name
zidan.reg_posx[name]=pos[0]
zidan.reg_posy[name]=pos[1]
def flyaway(self):
if self.dir_0n==1:
self.pos[1]+=10
elif self.dir_0n==2:
self.pos[0]-=10
elif self.dir_0n==3:
self.pos[1]-=10
elif self.dir_0n==4:
self.pos[0]+=10
global paodandaole
paodandaole=False
class tank_mine:
def __init__(self,name,pos):
self.name=name
self.pos=pos#self.posre=pos
self.surface_m=pygame.image.load('D:\\tank\\mine1.jpg').convert()
self.surface_mei=pygame.image.load('D:\\tank\\minemei.jpg').convert()
self.dir0n=1
self.qiangkoi=[pos[0]+24,pos[1]]
self.paodan=False
def paodana(self):
self.paodan=False
spacemeian=True
time_skip=0
while True:
time_skip=time_skip+1
if time_skip>=200:
break
else:
pressedjj=pygame.key.get_pressed()
if spacemeian and pressedjj[K_SPACE]:
spacemeian=False
self.paodan=True
else:
self.paodan=self.paodan
def move(self):
time_skip=0#self.posre=self.pos
meian=True
while True:
pressed_keys=pygame.key.get_pressed()
pygame.time.wait(1)
time_skip=time_skip+1
if time_skip>=200:
break
else:
if meian and pressed_keys[K_LEFT]:
self.dir0n=4
meian=False
self.qiangkoi=[self.pos[0],self.pos[1]+24]
if self.pos[0]<=10:
self.pos[0]=self.pos[0]
self.surface_m=pygame.image.load('D:\\tank\\mine4.jpg').convert()
else:
self.dir0n=4
self.pos[0]-=10
self.surface_m=pygame.image.load('D:\\tank\\mine4.jpg').convert()
elif meian and pressed_keys[K_RIGHT]:
self.dir0n=2
meian=False
self.qiangkoi=[self.pos[0]+48,self.pos[1]+24]
if self.pos[0]>=640-48:
self.pos[0]=self.pos[0]
self.surface_m=pygame.image.load('D:\\tank\\mine2.jpg').convert()
else:
self.dir0n=2
self.pos[0]+=10
self.surface_m=pygame.image.load('D:\\tank\\mine2.jpg').convert()
elif meian and pressed_keys[K_UP]:
self.dir0n=1
self.qiangkoi=[self.pos[0]+24,self.pos[1]]
meian=False
if self.pos[1]<=10:
self.pos[1]=self.pos[1]
self.surface_m=pygame.image.load('D:\\tank\\mine1.jpg').convert()
else:
self.dir0n=1
self.pos[1]-=10
self.surface_m=pygame.image.load('D:\\tank\\mine1.jpg').convert()
elif meian and pressed_keys[K_DOWN]:
self.dir0n=3
meian=False
self.qiangkoi=[self.pos[0]+24,self.pos[1]+48]
if self.pos[1]>=480-48:
self.pos[1]=self.pos[1]
self.surface_m=pygame.image.load('D:\\tank\\mine3.jpg').convert()
else:
self.dir0n=3
self.pos[1]+=10
self.surface_m=pygame.image.load('D:\\tank\\mine3.jpg').convert()
else:
self.dir0n=self.dir0n
return self.paodan,self.qiangkoi,self.dir0n

wodetank=tank_mine('dengrui',[640-48,480-48])
class tank_diren:
tank_dir=1
tank_pos=[0,0]
tank_qiangkou=[0,0]
num=0#down
surface_1=pygame.image.load('D:\\tank\\1.jpg').convert()
def __init__(self,name,pos):
self.name=name
self.pos=pos
self.tank_pos=pos
self.tank_dir=1
tank_diren.num=tank_diren.num+1
tank_diren.tank_pos=pos
tank_diren.tank_qiangkou=[pos[0]+43,pos[1]+85]
tank_diren.surface_1=pygame.image.load('D:\\tank\\1.jpg').convert()
def born_out(self):
tank_diren.surface_1=pygame.image.load('D:\\tank\\1.jpg').convert()
def die(self):
if paodandaole:
screen.fill((255,255,255))
pygame.time.wait(200)
exit()
else:
dasfa873=1
def luan(self):
a=random.randint(0,16)
if a==1 or a==2 or a==3 or a==4 or a==5 or a==6:#stop
tank_diren.tank_pos[1]=tank_diren.tank_pos[1]
elif a==7 or a==8 or a==9:
if tank_diren.tank_pos[1]<=380:
if tank_diren.tank_dir==1:
tank_diren.surface_1=pygame.image.load('D:\\tank\\1.jpg').convert()
tank_diren.tank_pos[1]=tank_diren.tank_pos[1]+20
tank_diren.tank_qiangkou=[tank_diren.tank_pos[0]+43,tank_diren.tank_pos[1]+85]
else:
tank_diren.surface_1=pygame.image.load('D:\\tank\\1.jpg').convert()
tank_diren.tank_pos[1]=tank_diren.tank_pos[1]+20
tank_diren.tank_dir=1
tank_diren.tank_qiangkou=[tank_diren.tank_pos[0]+43,tank_diren.tank_pos[1]+85]
else:
tank_diren.tank_pos[1]=tank_diren.tank_pos[1]
elif a==10 or a==11:
if tank_diren.tank_pos[1]>=20:
if tank_diren.tank_dir==3:
tank_diren.surface_1=pygame.image.load('D:\\tank\\3.jpg').convert()
tank_diren.tank_pos[1]=tank_diren.tank_pos[1]-20
tank_diren.tank_qiangkou=[tank_diren.tank_pos[0]+43,tank_diren.tank_pos[1]]
else:
tank_diren.surface_1=pygame.image.load('D:\\tank\\3.jpg').convert()
tank_diren.tank_pos[1]=tank_diren.tank_pos[1]-20
tank_diren.tank_dir=3
tank_diren.tank_qiangkou=[tank_diren.tank_pos[0]+43,tank_diren.tank_pos[1]]
else:
tank_diren.tank_pos[1]=tank_diren.tank_pos[1]
elif a==12 or a==13 or a==14:
if tank_diren.tank_pos[0]<=540:
if tank_diren.tank_dir==4:
tank_diren.surface_1=pygame.image.load('D:\\tank\\4.jpg').convert()
tank_diren.tank_pos[0]=tank_diren.tank_pos[0]+20
tank_diren.tank_qiangkou=[tank_diren.tank_pos[0]+85,tank_diren.tank_pos[1]+43]
else:
tank_diren.surface_1=pygame.image.load('D:\\tank\\4.jpg').convert()
tank_diren.tank_pos[0]=tank_diren.tank_pos[0]+20
tank_diren.tank_dir=4
tank_diren.tank_qiangkou=[tank_diren.tank_pos[0]+85,tank_diren.tank_pos[1]+43]
else:
tank_diren.tank_pos[1]=tank_diren.tank_pos[1]
elif a==15 or a==16:
if tank_diren.tank_pos[0]>=20:
if tank_diren.tank_dir==2:
tank_diren.surface_1=pygame.image.load('D:\\tank\\2.jpg').convert()
tank_diren.tank_pos[0]=tank_diren.tank_pos[0]-20
tank_diren.tank_qiangkou=[tank_diren.tank_pos[0],tank_diren.tank_pos[1]+43]
else:
tank_diren.surface_1=pygame.image.load('D:\\tank\\2.jpg').convert()
tank_diren.tank_pos[0]=tank_diren.tank_pos[0]-20
tank_diren.tank_dir=2
tank_diren.tank_qiangkou=[tank_diren.tank_pos[0],tank_diren.tank_pos[1]+43]
else:
tank_diren.tank_pos[1]=tank_diren.tank_pos[1]
return tank_diren.tank_dir

zero=tank_diren(1,[0,0])
def replace():
return pygame.image.load('D:\\tank\\5.jpg').convert()
def replace_1():
return pygame.image.load('D:\\tank\\zidanbujianle.jpg').convert()
def youwin():
screen.fill((255,255,255))
bbs=pygame.image.load('D:\\tank\\yingle.jpg').convert()
screen.blit(bbs,(0,0))
pygame.display.update()
pygame.time.wait(1000)
exit()
def youfail():
screen.fill((0,0,0))
aas=pygame.image.load('D:\\tank\\shule.jpg').convert()
screen.blit(aas,(0,0))
pygame.display.update()
pygame.time.wait(1000)
exit()
def dabai(paodanpos,direnpos,laoguixueliang):
if paodanpos[0]>=direnpos[0]:
if paodanpos[0]<=direnpos[0]+85:
if paodanpos[1]>=direnpos[1]:
if paodanpos[1]<=direnpos[1]+85:
laoguixueliang-=1
if laoguixueliang<=0:
youwin()
else:
dd=1
return laoguixueliang
def shule(zidanpos,wodepos,wodexueliang):
if zidanpos[0]>=wodepos[0] and zidanpos[0]<=wodepos[0]+85 and zidanpos[1]>=wodepos[1] and zidanpos[1]<=wodepos[1]+85:
wodexueliang-=1
if wodexueliang<=0:
youfail()
else:
dd=1
return wodexueliang
zidanzu=range(1001)
zidan_num=0
paodanzu=range(1001)
paodannum=0


while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()
if ini_done==False:
map_1.born_out()
map_2.born_out()
map_3.born_out()
map_4.born_out()
map_5.born_out()
map_6.born_out()
map_7.born_out()
map_8.born_out()
map_9.born_out()
map_10.born_out()
map_11.born_out()
map_12.born_out()
map_13.born_out()
map_14.born_out()
map_15.born_out()
map_16.born_out()
map_17.born_out()
map_18.born_out()
map_19.born_out()
map_20.born_out()
ini_done=True
zero.born_out()
screen.blit(zero.surface_1,zero.tank_pos)
screen.blit(wodetank.surface_m,wodetank.pos)
zidanzu[1]=zidan(1,zero.tank_qiangkou,zero.tank_dir)
zidan_num=zidan_num+1
screen.blit(zidanzu[1].surface_2,zidanzu[1].pos)
paodannum+=1
paodanzu[0]=paodan(paodannum,[640,480],4)
laoguixueliang=100
wodexueliang=100
else:
screen.blit(wodetank.surface_mei,wodetank.pos)
wodetank.paodana()
[paodanle,qqk,ddi]=wodetank.move()
if paodanle:
pygame.time.wait(1)
if paodannum>=999:
paodanzu[paodannum]=paodan(paodannum,qqk,ddi)
for jj in range(paodannum):
screen.blit(paodanzu[jj].surface_2,paodanzu[jj].pos)
paodannum=0
else:
paodanzu[paodannum]=paodan(paodannum,qqk,ddi)
paodannum+=1
else:
hnkn=1;
for iii in range(paodannum):
screen.blit(paodanzu[iii].surface_2,paodanzu[iii].pos)
#dabai(paodanzu[iii].pos,zero.tank_pos)
paodanzu[iii].flyaway()
laoguixueliang=dabai(paodanzu[iii].pos,zero.tank_pos,laoguixueliang)
screen.blit(paodanzu[iii].surface_1,paodanzu[iii].pos)
#pygame.time.wait(200)
screen.blit(wodetank.surface_m,wodetank.pos)
screen.blit(replace(),zero.tank_pos)
dirii=zero.luan()
if zidan_num<=999:
zidan_num=zidan_num+1
zidanzu[zidan_num]=zidan(zidan_num,zero.tank_qiangkou,dirii)
for ii in range(zidan_num):
if ii==0:
dhskjas=1
else:
#shule(zidanzu[ii].pos,wodetank.pos)
screen.blit(zidanzu[ii].surface_3,zidanzu[ii].pos)
zidanzu[ii].flyaway()
wodexueliang=shule(zidanzu[ii].pos,wodetank.pos,wodexueliang)
screen.blit(zidanzu[ii].surface_2,zidanzu[ii].pos)
else:
for ii in range(zidan_num):
screen.blit(zidanzu[ii].surface_3,zidanzu[ii].pos)
zidan_num=0
screen.blit(zero.surface_1,zero.tank_pos)
if laoguixueliang<=25:
rrxue=pygame.image.load('D:\\tank\\laoguiyidixue.jpg').convert()
screen.blit(rrxue,[640-148,0])
elif laoguixueliang>25 and laoguixueliang<=50:
rrxue=pygame.image.load('D:\\tank\\laoguierdixue.jpg').convert()
screen.blit(rrxue,[640-148,0])
elif laoguixueliang>50 and laoguixueliang<=75:
rrxue=pygame.image.load('D:\\tank\\laoguisandixue.jpg').convert()
screen.blit(rrxue,[640-148,0])
elif laoguixueliang>75:
rrxue=pygame.image.load('D:\\tank\\laoguimanxue.jpg').convert()
screen.blit(rrxue,[640-148,0])
pygame.display.update()

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约