HOTDOG CONFLICT
废话介绍 背景介绍
创作背景
19号磨磨蹭蹭地在重庆考完了雅思,终于有机会打开积灰已久的CSDN记录一下“代码人生"了哈哈哈。未来的一个月还要同时进行AP的学习,加油啊啊啊!
项目背景
这个项目是寒假参加“发现杯”前的复习项目,觉得还不错就想把它搬上来分享分享。
【声明】非原创,受小学时候玩的“金山打字通”接苹果游戏、和wsc吃热狗的启发
整体思路
- 准备工作(搭建环境,例如导入库、设置标题、窗框大小坐标等等)
- 设置处理事件类型
- 通过“类”的方式创造组件,并进行调用
- 后台处理
准备工作
导入库大家都应该很熟练,这里我们也很熟练地操作一下~
(玄武黑,感觉比简约白更高级炫酷欸哈哈哈,高光也很棒orz)
# coding:utf-8
import pygame
from pygame.locals import *
import time, random
import sys
import os
接下来的一步,创建窗口和设置标题我们在Time Management里面也见到过,这里不难也比较标准,不用过多进行思维上的理解。
值得一提的是,最后一行(255,255,255)表示的是边框的颜色,分别对应“红黄蓝”三原色的占比(此处代表白色),(0, 0, 0)的配比则是黑色。
# 初始化pygame环境
pygame.init()
# 创建一个长宽分别为1300/700窗口
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (100, 25)
canvas = pygame.display.set_mode((1000, 625))
canvas.fill((255, 255, 255))
窗口标题的设置也很常规~
# 设置窗口标题
pygame.display.set_caption("热狗大战")
(哈哈哈说一句题外话,我真的好喜欢Markdown:)
在完成外框的设置之后,我们就要开始逐步传输图片了。我们事先会将图片储存在同级别的文件夹里,运用调动相对路径的方式将它们传输上去。
(如何区分相对路径和绝对路径呢?
绝对路径跟快递收货地址很像,就像是卫星定位一样,需要提供确切的位置。在电脑中的绝对路径就相当于“C盘 XXX文件夹”
而相对路径适用于描述某个相邻的事物,例如当你知道我的位置时,我通知你来到我的邻居家,你也能很方便清晰地找到它。)
# 加载图片
bg = pygame.image.load("images/bg.jpg")
h = pygame.image.load("images/hotdog.png")
player = pygame.image.load("images/hero.png")
end = pygame.image.load("images/end.jpg")
bullet_tip = pygame.image.load("images/bullet_tip.png")
time_tip = pygame.image.load("images/time_tip.png")
到此为止准备任务就到此结束啦,我们接下来进行事件处理类型的设置。
下一步是对用户操作动作的设置,例如如果按下了移动箭头的按键,程序会进行怎样的变化。用到的是比较简单的if-elif-else语句,所以也很便于理解~
# 处理事件
def handleEvent():
for event in pygame.event.get(): # 循环出事件列表中的每个事件对象
if event.type == QUIT: # 如果事件的类型是退出类型
pygame.quit() # pygame游戏框的退出方法
sys.exit() # 系统程序结束方法
if event.type == KEYDOWN: # 如果事件类型是键盘被按下
if event.key == 276: # 通过key属性查看是不是左箭头被按下
Var.wsc.x -= 40 # 如果是,王思聪x轴左移动40
if event.key == 275: # 通过key属性查看是不是右箭头被按下
Var.wsc.x += 40 # 如果是,王思聪x轴右移动40
if Var.wsc.x < 0: # 如果王思聪的x轴比0小
Var.wsc.x = 0 # 那么还是把这个值赋值为0
if Var.wsc.x > 1000 - Var.wsc.width: # 如果王思聪的x轴最右边
Var.wsc.x = 1000 - Var.wsc.width # 那x值赋值为最右边的值
这时 重点就来了!!!
一般我们想用某个库/工具包里的功能时,我们直接用库名.方法名() 的方法进行调用;但如果此时我们想调用的功能还没有被创建出来,但每一次书写都特别麻烦时,我们就可以用def的方法自己创造工具包。
例如这里,我们想创造一个“字体”方法,之后设置字体的时候就可以直接调用 。
# 工具方法-写文字方法
def fillText(text, position, view=canvas):
# 设置字体样式和大小
my_font = pygame.font.Font("my_font/font1.ttf", 30)
# 渲染文字
text = my_font.render(text, True, (255, 255, 255))
view.blit(text, position)
- 第一排括号里的(text, position, view=canvas)是形式参数,相当于只是一个名字而已,没有任何实际意义。之后在调用这个方法时,再将实际参数传输进去。
- 第二行代码是进行字体的设置,前者是字体类型,后者是字体大小
- 下一行的第一个元素代表内容;第二个元素True代表“抗锯齿效果”,如果设置为False或者忽略设置,就会看到一群马赛克在晃动;后面的3个255我们在前面已经提到过啦~)</