Bomb Catcher

根据Python 游戏编程入门写下的简单小游戏,书上的代码有些许错误,在这里也作出勘误。


import sys, random, time, pygame
from pygame.locals import *

def print_text(font, x, y, text, color=(255,255,255)):
	imgText = font.render(text, True, color)
	screen.blit(imgText, (x,y))

pygame.init()
screen = pygame.display.set_mode((600,500))
pygame.display.set_caption("Bomb Catching Game")
font1 = pygame.font.Font(None,24)
pygame.mouse.set_visible(False)
white = 255,255,255
red = 50,50,50
yellow = 230,230,50
black = 0,0,0

lives = 3
score = 0
game_over = True
mouse_x = mouse_y = 0
pos_x = 300
pos_y = 460
bomb_x = random.randint(0,500)
bomb_y = -50
vel_y = 0.5

#repeating loop
while True:
	for event in pygame.event.get():
		if event.type == QUIT:
			sys.exit()
		elif event.type == MOUSEMOTION:
			mouse_x,mouse_y = event.pos
			move_x,move_y = event.rel
		elif event.type == MOUSEBUTTONUP:
			if game_over:
				game_over = False
				lives = 3
				score = 0

	keys = pygame.key.get_pressed()
	if keys[K_ESCAPE]:
		sys.exit()

	screen.fill((0,0,100))

	if game_over:
		print_text(font1, 100, 200, "<CLICK TO PLAY>")
	else:
		#move the bomb
		bomb_y += vel_y

		#has the player missed the bomb?
		if bomb_y > 500:
			bomb_x = random.randint(0,500)
			bomb_y = -50
			lives -= 1
			if lives == 0:
				game_over = True

		#see if player has caught the bomb
		elif bomb_y > pos_y:
			if bomb_x > pos_x and bomb_x < pos_x + 120:
				score += 10
				bomb_x = random.randint(0,500)
				bomb_y = -50

		#draw the bomb
		pygame.draw.circle(screen, black, (bomb_x-4,int(bomb_y)-4), 30 ,0) 
		pygame.draw.circle(screen, yellow, (bomb_x,int(bomb_y)), 30, 0)

		#set basket position
		pos_x = mouse_x
		if pos_x < 0:
			pos_x = 0
		elif pos_x > 500:
			pos_x = 500

		#draw basket
		pygame.draw.rect(screen, black, (pos_x-4,pos_y-4,120,40), 0)
		pygame.draw.rect(screen, red, (pos_x,pos_y,120,40), 0)

	#print # of lives
	print_text(font1, 0, 0, "LIVES:" + str(lives))

	#print score
	print_text(font1, 500, 0, "SCORE:" + str(score))

	pygame.display.update()
	 


程序实例:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值