QQ技术分享交流互助群
我把整个文件(这个实践的)放“喵做梦技术讨论群”里了,需者加群自取。
QQ群号:566341887 (大家一起互帮互助,共同进步,交流分享,奔赴未来!)
序
书接上回, 废话不多说,直接开干!
第一步、创建文件夹
第一步就迅速点,直接过。
同一级中放代码,存放图片的文件夹P和存放数据的文件夹data。
好,非常快,继续!
第二步、搭建基本框架
也就是最最最基础,简单的,什么导入模块啊,弹出窗口啊之类了。
这里也是非常的简单,速过!
import pygame
from random import randint
pygame.init()
scsize=(1000,600)
screen=pygame.display.set_mode(scsize)
pygame.display.set_caption("乱来的PVZ")
while True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
pygame.display.flip()
顺手把帧率和字体渲染一类简单的给准备好。
import pygame
from random import randint
pygame.init()
scsize=(1000,600)
#基础
screen=pygame.display.set_mode(scsize)
pygame.display.set_caption("乱来的PVZ")
zf=pygame.time.Clock()
ts=pygame.font.SysFont("simhei",20)
tc=ts.render("",True,(0,0,0))
while True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
zf.tick(30)
pygame.display.flip()
非常的简单喵,下一步。
第三步、状态机雏形
目前这几步都挺简单的,状态机的话,浅浅分一下:
这么来分,普通模式、娱乐模式、无尽模式、商店、各种各样……太多就先不一一举例了。
无论是什么模式,其实只要会一种了,其他的也就简单了,所以我们先从普通模式开始。
import pygame
from random import randint
pygame.init()
scsize=(1000,600)
#全局变量
menu=0
putongmark=1
#基础
screen=pygame.display.set_mode(scsize)
pygame.display.set_caption("乱来的PVZ")
zf=pygame.time.Clock()
ts=pygame.font.SysFont("simhei",20)
tc=ts.render("",True,(0,0,0))
while True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
if menu==0:#进入界面
pass
elif menu==1:#菜单
pass
zf.tick(30)
pygame.display.flip()
第四步、基础化
1.目标
这一步的目标非常明确,是为了让游戏能运行(但是不能打僵尸目前)。
2.准备
我们要根据窗口的大小,绘制相应的图片。
并且要通过读取鼠标的坐标,以及判断是否按下来确定是否改变menu的值。
这种图片如果要还原的话,大家最好还是去网上搜原图,截下来,然后扣掉边边角角拿来用。
本喵的选择是:自己手搓,这样好玩。
那么开始!
我自己画了一张,非常抽象,无所谓,自己开心就行。
(通过不同状态下的login按键,提示玩家是否触屏到了按键。)
接下来,让我们输入一些简单的代码。(不懂的看以前写的。)
3.缝合
import pygame
from random import randint
pygame.init()
scsize=(1000,600)
#全局变量
menu=0
putongmark=1
#基础
screen=pygame.display.set_mode(scsize)
pygame.display.set_caption("乱来的PVZ")
zf=pygame.time.Clock()
ts=pygame.font.SysFont("simhei",20)
tc=ts.render("",True,(0,0,0))
#login
loginback=pygame.image.load("P/login/loginback.png")
login=pygame.image.load("P/login/loginno.png")
loginmark=0
#menu
menuback=pygame.image.load("P/menu/back.png")
while True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
mox, moy = pygame.mouse.get_pos() #实时读取鼠标x,y
if menu==0:#进入界面
screen.blit(loginback,(0,0))
screen.blit(login,(400,400))
if loginmark==0:
login=pygame.image.load("P/login/loginno.png")
else : login=pygame.image.load("P/login/loginyes.png")
loginmark=0
if mox>=400 and mox<=600:
if moy>=400 and moy<=450:
loginmark=1
if loginmark==1 and event.type == pygame.MOUSEBUTTONDOWN:
menu=1
elif menu==1:#菜单
screen.blit(menuback,(0,0))
zf.tick(30)
pygame.display.flip()
非常的简单,里面这个对loginmark的判断,就是提示玩家鼠标是否碰到该按键。
我们就先从最简单的开始。
(还要做一个进入到冒险模式的按键)
第五步、冒险模式
把这个也缝合进去之后,我们就可以真正开始了。
import pygame
from random import randint
pygame.init()
scsize=(1000,600)
#全局变量
menu=0
putongmark=1
#基础
screen=pygame.display.set_mode(scsize)
pygame.display.set_caption("乱来的PVZ")
zf=pygame.time.Clock()
ts=pygame.font.SysFont("simhei",20)
tc=ts.render("",True,(0,0,0))
#login
loginback=pygame.image.load("P/login/loginback.png")
login=pygame.image.load("P/login/loginno.png")
loginmark=0
#menu
menuback=pygame.image.load("P/menu/back.png")
mx=pygame.image.load("P/menu/maoxianno.png")
mxmark=0
while True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
mox, moy = pygame.mouse.get_pos() #实时读取鼠标x,y
if menu==0:#进入界面
screen.blit(loginback,(0,0))
screen.blit(login,(400,400))
if loginmark==0:
login=pygame.image.load("P/login/loginno.png")
else : login=pygame.image.load("P/login/loginyes.png")
loginmark=0
if mox>=400 and mox<=600:
if moy>=400 and moy<=450:
loginmark=1
if loginmark==1 and event.type == pygame.MOUSEBUTTONDOWN:
menu=1
elif menu==1:#菜单
screen.blit(menuback,(0,0))
screen.blit(mx,(700,200))
if mxmark==0:
mx=pygame.image.load("P/menu/maoxianno.png")
else : mx=pygame.image.load("P/menu/maoxianyes.png")
mxmark=0
if mox>=700 and mox<=880:
if moy>=200 and moy<=250:
mxmark=1
if mxmark==1 and event.type == pygame.MOUSEBUTTONDOWN:
menu=2
elif menu==2:#冒险模式
pass
zf.tick(30)
pygame.display.flip()
1.要素准备
在植物大战僵尸中,关卡里面有几个重要的元素:草坪背景、阳光数量显示、卡牌、僵尸。
那么就先随便画点图片(大不了后期做优化)。
但是,不急着画,先理论,后运用。毕竟这个图片大小,是有点影响后面的。
2.理论基础
(1)草坪
关卡中,我们要先知道,这个窗口的大小为1000×600,我们接下来要对其进行合理地分划。
我数出来,关卡中草坪的区块是9×5个,那么我们可以把每个区块的大小画成100×100。
从上到下,从左到右依次为:
阳光 | 卡片槽 | 铲子 | 菜单 |
小推车 | 草坪 | 僵尸产地 | |
钱 |