python小游戏——兔鼠大战
一.准备环境:更改设置pip 国内镜像
在使用pycharm来制作小游戏写代码的时候需要编译环境,使用pip镜像源,由于pip管理工具安装库文件时,默认使用国外的源文件,因此在国内的下载速度会比较慢,可能只有50KB/s。幸好,国内的一些顶级科研机构已经给我们准备好了各种镜像,下载速度可达2MB/s。所以需要更改设置成pip国内镜像。
国内源:
新版ubuntu要求使用https源,要注意。
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
1. 临时使用
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple
例如:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider,这样就会从清华这边的镜像去安装pyspider库。
2.默认使用
windows系统使用cmd(命令指示符)快速设置
- pip install pip -U # 升级pip到最新版本
- pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
注:在命令指示符里依次敲以上代码,以上例子都是用的清华大学的镜像
二.进行代码的编写
import pygame
from pygame.locals import *
import math
import random
keys = [False, False, False, False]
playerpos = [100, 100]
acc = [0, 0]
arrows = []
badtimer = 100
badtimer1 = 0
badguys = [[640, 100]]
healthvalue = 194
pygame.init()
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("兔鼠大战")
pygame.mixer.init()
player = pygame.image.load("resources/images/dude.png")
grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")
arrow = pygame.image.load("resources/images/bullet.png")
badguyimg1 = pygame.image.load("resources/images/badguy.png")
gameover = pygame.image.load("resources/images/gameover.png")
youwin = pygame.image.load("resources/images/youwin.png")
healthbar = pygame.image.load("resources/images/healthbar.png")
health = pygame.image.load("resources/images/health.png")
badguyimg = badguyimg1
hit = pygame.mixer.Sound("resources/audio/explode.wav")
enemy = pygame.mixer.Sound("resources/audio/enemy.wav")
shoot = pygame.mixer.Sound("resources/audio/shoot.wav")
hit.set_volume(0.05)
enemy.set_volume(0.05)
shoot.set_volume(0.05)
pygame.mixer.music.load('resources/audio/moonlight.wav')
pygame.mixer.music.play(-1, 0.0)
pygame.mixer.music.set_volume(0.25)
running = 1
exitcode = 0
while running:
badtimer -= 1
screen.fill(0)
for x in range(width // grass.get_width() + 1):
for y in range(height // grass.get_height() + 1):
screen.blit(grass, (x * 100, y * 100))
screen.blit(castle, (0, 30))
screen.blit(castle, (0, 135))
screen.blit(castle, (0, 240))
screen.blit(castle, (0, 345))
position = pygame.mouse.get_pos()
angle = math.atan2(position[1] - (playerpos[1] + 32), position[0] - (playerpos[0] + 26))
playerrot = pygame.transform.rotate(player, 360 - angle * 57.29)
playerpos1 = (playerpos[0] - playerrot.get_rect().width / 2, playerpos[1] - playerrot.get_rect().height / 2)
screen.blit(playerrot, playerpos1)
for bullet in arrows:
index = 0
velx = math.cos(bullet[0]) * 10
vely = math.sin(bullet[0]) * 10
bullet[1] += velx
bullet[2] += vely
if bullet[1] < -64 or bullet[1] > 640 or bullet[2] < -64 or bullet[2] > 480:
arrows.pop(index)
index += 1
for projectile in arrows:
arrow1 = pygame.transform.rotate(arrow, 360 - projectile[0] * 57.29)
screen.blit(arrow1, (projectile[1], projectile[2]))
if badtimer == 0:
badguys.append([640, random.randint(50, 430)])
badtimer = 100 - (badtimer1 * 2)
if badtimer1 >= 35:
badtimer1 = 35
else:
badtimer1 += 5
index = 0
for badguy in badguys:
badrect = pygame.Rect(badguyimg.get_rect())
badrect.top = badguy[1]
badrect.left = badguy[0]
if badrect.left < 64:
hit.play()
healthvalue -= random.randint(5, 20)
badguys.pop(index)
index1 = 0
for bullet in arrows:
bullrect = pygame.Rect(arrow.get_rect())
bullrect.left = bullet[1]
bullrect.top = bullet[2]
if badrect.colliderect(bullrect):
enemy.play()
acc[0] += 1
badguys.pop(index)
arrows.pop(index1)
index1 += 1
if badguy[0] < -64:
badguys.pop(index)
badguy[0] -= 7
index += 1
for badguy in badguys:
screen.blit(badguyimg, badguy)
font = pygame.font.Font(None, 24)
survivedtext = font.render(
str((90000 - pygame.time.get_ticks()) / 60000) + ":" + str((90000 - pygame.time.get_ticks()) / 1000 % 60).zfill(
2), True, (0, 0, 0))
textRect = survivedtext.get_rect()
textRect.topright = [635, 5]
screen.blit(survivedtext, textRect)
screen.blit(healthbar, (5, 5))
for health1 in range(healthvalue):
screen.blit(health, (health1 + 8, 8))
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit(0)
if event.type == pygame.KEYDOWN:
if event.key == K_UP:
keys[0] = True
elif event.key == K_LEFT:
keys[1] = True
elif event.key == K_DOWN:
keys[2] = True
elif event.key == K_RIGHT:
keys[ 3 ] = True
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
keys[0] = False
elif event.key == pygame.K_LEFT:
keys[1] = False
elif event.key == pygame.K_DOWN:
keys[2] = False
elif event.key == pygame.K_RIGHT:
keys[3] = False
if event.type == pygame.MOUSEBUTTONDOWN:
shoot.play()
position = pygame.mouse.get_pos()
acc[1] += 1
arrows.append(
[math.atan2(position[1] - (playerpos1[1] + 32), position[0] - (playerpos1[0] + 26)), playerpos1[0] + 32,
playerpos1[1] + 32])
if keys[0]:
playerpos[1] -= 5
elif keys[2]:
playerpos[1] += 5
if keys[1]:
playerpos[0] -= 5
elif keys[3]:
playerpos[0] += 5
if pygame.time.get_ticks() >= 90000:
running = 0
exitcode = 1
if healthvalue 0:
running = 0
exitcode = 0
if acc[1] != 0:
accuracy = acc[0] * 1.0 / acc[1] * 100
else:
accuracy = 0
if exitcode == 0:
pygame.font.init()
font = pygame.font.Font(None, 24)
text = font.render("Accuracy: " + str(accuracy) + "%", True, (255, 0, 0))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery + 24
screen.blit(gameover, (0, 0))
screen.blit(text, textRect)
else:
pygame.font.init()
font = pygame.font.Font(None, 24)
text = font.render("Accuracy: " + str(accuracy) + "%", True, (0, 255, 0))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery + 24
screen.blit(youwin, (0, 0))
screen.blit(text, textRect)
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit(0)
pygame.display.flip()
成果显示如下
; 以上代码有参考其他博主的,相关素材及其音效也是通过公众号:Python代码大全获得。
具体资源的及其参考网址如下:
https://blog.csdn.net/weixin_42756970/article/details/106475154
新手小白制作,如有问题请各位大佬多多指教!阿里嘎多!
Original: https://blog.csdn.net/ITsailorMoon/article/details/112384013
Author: ITsailorMoon
Title: python小游戏——兔鼠大战
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/781797/
转载文章受原作者版权保护。转载请注明原作者出处!