我做了一个导航站(域名是挂路灯的全拼gualudeng.com),里面精选了各种影视,动漫,黑科技,实用工具,搞笑有趣的站点,动动大家可爱的小手,点进来看看吧,良心站点。
#coding=utf-8
import pygame
import threading
import random from time import sleep
from pygame.locals import *from sys import exit
import math
pygame.init()
#定义一个坦克类
class Tank():
gun = 25 #炮筒长度
good_r = 30 #坦克半径
bad_r = 20
speed1 = 20#度
def __init__(self,x,y,attr,screen): #坦克的坐标半径以及好坏,程序组面板
self.speed=int(random.uniform(1,3))
self.x=x
self.y=y
self.attr=attr
self.screen=screen
def paint(self): #画坦克.
global good_r , bad_r
if self.attr==False:
pygame.draw.circle(self.screen,[0,0,0],[self.x,self.y],self.bad_r,0)
pygame.draw.line
(self.screen,(0,0,0),(self.x,self.y+self.bad_r),(self.x,self.y+self.bad_r+self.gun))
else:
pygame.draw.circle(self.screen,[255,0,0],[self.x,self.y],self.good_r,0)
pygame.draw.line
(self.screen,(255,0,0),(self.x,self.y-self.good_r),(self.x,self.y-self.good_r-self.gun))
def fire(self):
global gun,good_r,bad_r
m = missile(self.x,self.y,self.bad_r,self.gun,self.attr,self.screen)
return m
def move(self): #控制敌人坦克移动
self.y+=self.speed
def myMove(self,event,missiles):#控制自己坦克移动响应键盘监控。
global speed1
if event.type == KEYDOWN:
if event.key == K_RIGHT:
self.x += self.speed1
if event.key == K_LEFT:
self.x -= self.speed1
if event.key == K_DOWN:
missiles.append(self.fire())
if event.type == QUIT:
sys.exit()
#####################################################
#定义子弹类
class missile():
r1=4 #定义子弹的半径。
speed = 4
def __init__(self,x,y,r,gun,attr,screen):
self.screen=screen
self.attr=attr
if attr==True:
self.x=x
self.y=y-r-gun
else:
self.x=x
self.y=y+r+gun
def paint(self): #画子弹
global r1
if self.attr == False:
pygame.draw.circle(self.screen,[0,0,0],[self.x,self.y],self.r1,0)
else:
pygame.draw.circle(self.screen,[255,0,0],[self.x,self.y],self.r1,0)
def move(self):#定义子弹的移动。
global speed
if self.attr==True:
self.y-=self.speed
else:
self.y+=self.speed
#####################################################
#全局变量。
SWIDTH = 800 #设置窗口的长宽
SHIGHT = 800
screen = pygame.display.set_mode([SHIGHT,SWIDTH],0,8) #创建窗口。
tanks=[]#创建坦克池。
Threads = [] #创建线程池
missiles = [] #创建子弹池。
Mytank = Tank(400,760,True,screen)#创建坦克
total=0#游戏成功的记录数
success = 10#打死10个坦克过关。
######################################################
def main(): #主函数
global SWIDTH,SHIGHT,screen,tanks,Threads,missiles,Mytank
tanks.append(Mytank)
creatThread()
######################################################
def paint():
global SWIDTH,SHIGHT,screen,tanks,Threads,missiles,Mytank
while True:
jianKong()#添加监控。
checkCollsion()#添加碰撞检测。
screen.fill([255,255,255])#这一句话放在前面。
pygame.display.set_caption("TankWar")
for t in tanks:#画坦克
t.paint()
for m in missiles:#画子弹
m.paint()
pygame.display.update()
sleep(0.0001)
#####################################################
def fire(): #敌机发射子弹的线程
global SWIDTH,SHIGHT,screen,tanks,Threads,missiles
while(True):
for t in tanks:
if(t.attr==False):
missiles.append(t.fire())
sleep(2) #一秒发射一颗子弹。
#####################################################
def jianKong():
global Mytank,missiles
for event in pygame.event.get():
Mytank.myMove(event,missiles)
#####################################################
def move(): #定义敌机和炸弹移动的线程。
global SWIDTH,SHIGHT,screen,tanks,Threads,missiles
while True:
checkOut()#检查出界
for t in tanks:
if t.attr==False:
t.move()
for m in missiles:
m.move()
sleep(0.01)
#####################################################
def createTank():#产生坦克的线程。
global SWIDTH,SHIGHT,screen,tanks,Threads,missiles
x=0
while True:
for i in range(1,6):
x1=int(random.uniform(30,SWIDTH/5-30))+x
y=int(random.uniform(-200,0))
t=Tank(x1,y,False,screen)
tanks.append(t)
x=int(SWIDTH/5+x)
x=0
sleep(8)
####################################################
def checkOut():#检查子弹和坦克是否出界。
for t in tanks:
if t.y>=SHIGHT+t.bad_r:
tanks.remove(t)
for m in missiles:
if m.y >= SHIGHT+m.r1:
missiles.remove(m)
#################################################
def gameOver(attr):#游戏结束的时候调用。
if attr==False:
exit("你已经死亡")
else:
exit("过关了")
###################################################
def checkCollsion():#碰撞检测。
global total,success,missiles,tanks
for m in missiles:
if m.attr == False:
s =int(math.sqrt((Mytank.x-m.x)*(Mytank.x-m.x)+(Mytank.y-m.y)*(Mytank.y-m.y)))
if s<=m.r1+Mytank.good_r:
missiles.remove(m)
gameOver(False)
if m.attr == True:
for t in tanks:
s =int(math.sqrt((t.x-m.x)*(t.x-m.x)+(t.y-m.y)*(t.y-m.y)))
if s<=t.bad_r+m.r1:
missiles.remove(m)
tanks.remove(t)
if total==success:
gameOver(True)
total+=1
###################################################
def creatThread(): #创建绑定和开始线程。
global SWIDTH,SHIGHT,screen,tanks,Threads,missiles
Threads.append(threading.Thread(target=paint)) #这里的逗号要注意。
Threads.append(threading.Thread(target=fire)) #这里的逗号要注意。
Threads.append(threading.Thread(target=createTank)) #这里的逗号要注意。
Threads.append(threading.Thread(target=move)) #这里的逗号要注意。
for t in Threads: #启动线程
t.setDaemon(True)
t.start()
t.join()
if __name__ == "__main__":
main()
下面是坦克类
#coding=utf-8
import pygame
import threading
import random
from time import sleep
from pygame.locals import *
from sys import exit
import math
pygame.init()
#定义一个坦克类
class Tank():
gun = 25 #炮筒长度
good_r = 30 #坦克半径
bad_r = 20
speed1 = 20#度
def __init__(self,x,y,attr,screen): #坦克的坐标半径以及好坏,程序组面板
self.speed=int(random.uniform(1,3))
self.x=x
self.y=y
self.attr=attr
self.screen=screen
def paint(self): #画坦克.
global good_r , bad_r
if self.attr==False:
pygame.draw.circle(self.screen,[0,0,0],[self.x,self.y],self.bad_r,0)
pygame.draw.line
(self.screen,(0,0,0),(self.x,self.y+self.bad_r),(self.x,self.y+self.bad_r+self.gun))
else:
pygame.draw.circle(self.screen,[255,0,0],[self.x,self.y],self.good_r,0)
pygame.draw.line
(self.screen,(255,0,0),(self.x,self.y-self.good_r), (self.x,self.y-self.good_r-self.gun))
def fire(self):
global gun,good_r,bad_r
m = missile(self.x,self.y,self.bad_r,self.gun,self.attr,self.screen)
return m
def move(self): #控制敌人坦克移动
self.y+=self.speed
def myMove(self,event,missiles):#控制自己坦克移动响应键盘监控。
global speed1
if event.type == KEYDOWN:
if event.key == K_RIGHT:
self.x += self.speed1
if event.key == K_LEFT:
self.x -= self.speed1
if event.key == K_DOWN:
missiles.append(self.fire())
if event.type == QUIT:
sys.exit()
#####################################################
#定义子弹类
class missile():
r1=4 #定义子弹的半径。
speed = 4
def __init__(self,x,y,r,gun,attr,screen):
self.screen=screen
self.attr=attr
if attr==True:
self.x=x
self.y=y-r-gun
else:
self.x=x
self.y=y+r+gun
def paint(self): #画子弹
global r1
if self.attr == False:
pygame.draw.circle(self.screen,[0,0,0],[self.x,self.y],self.r1,0)
else:
pygame.draw.circle(self.screen,[255,0,0],[self.x,self.y],self.r1,0)
def move(self):#定义子弹的移动。
global speed
if self.attr==True:
self.y-=self.speed
else:
self.y+=self.speed
#####################################################
#全局变量。
SWIDTH = 800 #设置窗口的长宽
SHIGHT = 800
screen = pygame.display.set_mode([SHIGHT,SWIDTH],0,8) #创建窗口。
tanks=[]#创建坦克池。
missiles = [] #创建子弹池。
Mytank = Tank(400,760,True,screen)#创建坦克
total=0#游戏成功的记录数
success = 10#打死10个坦克过关。
######################################################
def main(): #主函数
global SWIDTH,SHIGHT,screen,tanks,Threads,missiles,Mytank
tanks.append(Mytank)
while True:
createTank()
paint()
fire()
jianKong()
checkCollsion()#添加碰撞检测。
checkOut()
move()
sleep(0.01)
######################################################
def paint():
global SWIDTH,SHIGHT,screen,tanks,Threads,missiles,Mytank
screen.fill([255,255,255])#这一句话放在前面。
pygame.display.set_caption("TankWar")
for t in tanks:#画坦克
t.paint()
for m in missiles:#画子弹
m.paint()
pygame.display.update()
#####################################################
def fire(): #敌机发射子弹的线程
global SWIDTH,SHIGHT,screen,tanks,Threads,missiles
if random.uniform(1,300) ==float(5) or random.randint(1,300)== 10: #添加随机数改变产生速率###重点。。。。。。。
for t in tanks:
if(t.attr==False):
missiles.append(t.fire())
#####################################################
def jianKong():
global Mytank,missiles
for event in pygame.event.get():
Mytank.myMove(event,missiles)
#####################################################
def move(): #定义敌机和炸弹移动的线程。
global SWIDTH,SHIGHT,screen,tanks,Threads,missiles
checkOut()#检查出界
for t in tanks:
if t.attr==False:
t.move()
for m in missiles:
m.move()
#####################################################
def createTank():#产生坦克的线程。
global SWIDTH,SHIGHT,screen,tanks,Threads,missiles
x=0
if random.uniform(1,300) ==float(5) or random.randint(1,300)== 10: #添加随机数改变产生速率###重点。。。。。。。
for i in range(1,6):
x1=int(random.uniform(30,SWIDTH/5-30))+x
y=int(random.uniform(-200,0))
t=Tank(x1,y,False,screen)
tanks.append(t)
x=int(SWIDTH/5+x)
####################################################
def checkOut():#检查子弹和坦克是否出界。
for t in tanks:
if t.y>=SHIGHT+t.bad_r:
tanks.remove(t)
for m in missiles:
if m.y >= SHIGHT+m.r1:
missiles.remove(m)
#################################################
def gameOver(attr):#游戏结束的时候调用。
if attr==False:
exit("你已经死亡")
else:
exit("过关了")
###################################################
def checkCollsion():#碰撞检测。
global total,success,missiles,tanks
for m in missiles:
if m.attr == False:
s =int(math.sqrt((Mytank.x-m.x)*(Mytank.x-m.x)+(Mytank.y-m.y)*(Mytank.y-m.y)))
if s<=m.r1+Mytank.good_r:
missiles.remove(m)
gameOver(False)
if m.attr == True:
for t in tanks:
s =int(math.sqrt((t.x-m.x)*(t.x-m.x)+(t.y-m.y)*(t.y-m.y)))
if s<=t.bad_r+m.r1:
missiles.remove(m)
tanks.remove(t)
if total==success:
gameOver(True)
total+=1
###################################################
if __name__ == "__main__": #当单独运行次文件的时候调用,方便调试
main()