基于python的游戏《泡泡爆破》

此款游戏玩法为:

用方向键控制潜水艇

撞破泡泡得分

得分达到1000获得奖励时间

时间用完,游戏结束

话不多说,直接上代码 

 

from tkinter import*
HEIGHT = 1500
WIDTH = 1800
window = Tk()
window.title('Bubble blaster')
c = Canvas(window,width=WIDTH,height=HEIGHT,bg='darkblue')#darkblue
c.pack()


ship_id = c.create_polygon(5,5,5,25,30,15,fill='red')
ship_id2 = c.create_oval(0,0,30,30,outline='red')
SHIP_R = 15
MID_X = WIDTH / 2
MID_Y = HEIGHT / 2
c.move(ship_id,MID_X,MID_Y)
c.move(ship_id2,MID_X,MID_Y)


SHIP_SPD = 10
def move_ship(event):
      if event.keysym == 'Up':
            c.move(ship_id,0,-SHIP_SPD)
            c.move(ship_id2,0,-SHIP_SPD)
      elif event.keysym == 'Down':
            c.move(ship_id,0,SHIP_SPD)
            c.move(ship_id2,0,SHIP_SPD)
      elif event.keysym == 'Left':
            c.move(ship_id,-SHIP_SPD,0)
            c.move(ship_id2,-SHIP_SPD,0)
      elif event.keysym == 'Right':
            c.move(ship_id,SHIP_SPD,0)
            c.move(ship_id2,SHIP_SPD,0)
c.bind_all('<Key>',move_ship)


from random import randint
bub_id = list()
bub_r = list()
bub_speed = list()
MIN_BUB_R = 10
MAX_BUB_R = 30
MAX_BUB_SPD = 10
GAP = 100
def create_bubble():
      x = WIDTH + GAP
      y = randint(0,HEIGHT)
      r = randint(MIN_BUB_R,MAX_BUB_R)
      id1 = c.create_oval(x - r,y - r,x + r,y + r,outline='white')
      bub_id.append(id1)
      bub_r.append(r)
      bub_speed.append(randint(1,MAX_BUB_SPD))

      
def move_bubbles():
      for i in range(len(bub_id)):
            c.move(bub_id[i],-bub_speed[i],0)


def get_coords(id_num):
      pos = c.coords(id_num)
      x=(pos[0]+pos[2])/2
      y=(pos[1]+pos[3])/2
      return x,y


def del_bubble(i):
      del bub_r[i]
      del bub_speed[i]
      c.delete(bub_id[i])
      del bub_id[i]


def clean_up_bubs():
      for i in range(len(bub_id)-1,-1,-1):
            x,y = get_coords(bub_id[i])
            if x < -GAP:
                  del_bubble(i)


from math import sqrt
def distance(id1,id2):
      x1,y1 = get_coords(id1)
      x2,y2 = get_coords(id2)
      return sqrt((x2-x1)**2 +(y2-y1)**2)


def collision():
      points = 0
      for bub in range(len(bub_id)-1,-1,-1):
          if distance(ship_id2,bub_id[bub]) < (SHIP_R + bub_r[bub]):
              points += (bub_r[bub] + bub_speed[bub])
              del_bubble(bub)
      return points


c.create_text(50,30,text='TIME',fill='white')
c.create_text(150,30,text='SCORE',fill='white')
time_text = c.create_text(50,50,fill = 'white')
score_text = c.create_text(150,50,fill = 'white')
def show_score(score):
      c.itemconfig(score_text,text=str(score))
def show_time(time_left):
      c.itemconfig(time_text,text=str(time_left))

from time import sleep,time
BUB_CHANCE = 10
TIME_LIMIT = 100
BONUS_SCORE = 1500
score = 0
bonus = 0
end = time() + TIME_LIMIT 


#主循环
score = 0
from time import sleep,time
BUB_CHANCE = 10
while time() < end:
      SHIP_SPD += 0.001
      if randint(1,BUB_CHANCE) == 1:
            create_bubble()
      move_bubbles()
      clean_up_bubs()
      score += collision()
      if (int(score / BONUS_SCORE)) > bonus:
            bonus += 1
            end += TIME_LIMIT
      show_score(score)
      show_time(int(end - time()))
      window.update()
      sleep(0.01)
a = 0
if score > a:
      a = score

c.create_text(MID_X,MID_Y,text='GAME OVER',fill = 'white',font = ('Helvetica',30))
c.create_text(MID_X,MID_Y + 30,text='Score: '+ str(score),fill = 'white')
c.create_text(MID_X,MID_Y + 45,text='Bonus time: ' + str(bonus*TIME_LIMIT),fill = 'white')
c.create_text(MID_X,MID_Y + 60,text='Best score: ' + str(a),fill = 'white')







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值