猫史档案馆


【python:飞机大战】教你用pygame开发游戏(pygame零基础向)

用户:天上的流星_tianqiVirus天上的流星_tianqiVirus查看:25 回复:11 评论:25 创建时间:2019-05-18T22:32:23


教你用pygame开发游戏

今日游戏:飞机大战(自创)

本文为pygame零基础向,非python零基础向

请先安装python(https://shequ.codemao.cn/download

为了使帖子多点水分我决定不罗嗦直接开始

 

pygame是python的一个第三方库,使用前要先安装

按下windows+r

center_image

输入cmd打开命令行界面

center_image

输入以下命令

pip install pygame

center_image

耐心等待安装直到出现Successfully

说明安装成功

如果你电脑上有sublime那么可以将你的代码写在sublime上

如果没有,请新建文本文档,将其拓展名改为.py,再用python IDLE或海龟(不推荐)打开

现在请输入以下代码(功能在注释里):

import pygame
import random #随机数

pygame.init() #初始化pygame
screen = pygame.display.set_mode((338,492))#设置屏幕大小
pygame.display.set_caption("飞机大战")#设置屏幕标题

keepGoing=True #控制程序持续运行

while keepGoing:
	for event in pygame.event.get():#检测鼠标和键盘按下,移动之类的事件
		if event.type == pygame.QUIT: #检测是否按下关闭键
			keepGoing = False #如果是就退出循环

pygame.quit() #退出pygame

完成后运行(sublime按ctrl+B,IDLE按F5)

会出现长不长扁不扁的界面:center_image

这就说明你成功了

那,加上背景怎么样?

在你的代码所在文件夹(我的是fly)下创建assets文件夹

在assets文件夹下创建image文件夹

把背景放在image文件夹下

背景图片在编程猫图形化编程里有这个素材,弄下来

center_image可以进行裁剪,弄到分辨率为338,492为止

在代码 pygame.display.set_caption("飞机大战") 后面加上这个

background_1=pygame.image.load("assets/image/background.png")
background_2=pygame.image.load("assets/image/background.png")

这个load就是把图片转换成pygameSurface,简单点说就是你想要放图片在上面你就先写这行

注意,load内的文本要和图片路径一致

然后在代码 keepGoing = False 后面加上这个

	screen.blit(background1,(0,0))
	screen.blit(background2,(0,0))
	
	pygame.display.update()

blit是把图片显示在屏幕上,括号内的数字为坐标

update是对屏幕更新,你不加就只会看到一张图片,没有动画效果(后面会弄)

注意,这行代码是一格缩进(你原封不动照搬应该没问题)

运行成这样

center_image

但是,更完善一点的话背景是会不断往下移动的

这就涉及到坐标了

在pygame中,左上角为零坐标

往下y坐标增加,往右x坐标增加,往上和往左反之

想要设计出流动的样式,思路是这样的:

背景1和背景2一起往下移动

当背景1完全掉到底部看不见时,就移动到背景2的上面

当背景2完全掉到底部看不见时,就移动到背景1的上面

用这样的思路,我们可以这样改

在代码 keepGoing = True 后面加上这个

background_y = 0

在代码 while keepGoing: 后面加上这个

	background_y+=1

在代码 keepGoing = False 后面加上这个

	if background_y == 492:
		background_y = 0

把代码 screen.blit(background1,(0,0)) screen.blit(background2,(0,0)) 改成这个

	screen.blit(background_1,(0,background_y))
	screen.blit(background_2,(0,background_y-492))

你再根据之前的思路对照代码想想看,你就能明白,这个为什么能动起来了

最终代码为:

import pygame
import random #随机数

pygame.init() #初始化pygame
screen = pygame.display.set_mode((338,492))#设置屏幕大小
pygame.display.set_caption("飞机大战")#设置屏幕标题

background_1=pygame.image.load("assets/image/background.png")
background_2=pygame.image.load("assets/image/background.png")

keepGoing=True #控制程序持续运行

import pygame
import random #随机数

pygame.init() #初始化pygame
screen = pygame.display.set_mode((338,492))#设置屏幕大小
pygame.display.set_caption("飞机大战")#设置屏幕标题

background_1=pygame.image.load("assets/image/background.png")
background_2=pygame.image.load("assets/image/background.png")

keepGoing=True #控制程序持续运行

background_y = 0

while keepGoing:

	background_y+=1

	for event in pygame.event.get():#检测鼠标和键盘按下,移动之类的事件
		if event.type == pygame.QUIT: #检测是否按下关闭键
			keepGoing = False #如果是就退出循环

	if background_y == 492:
		background_y = 0

	screen.blit(background_1,(0,background_y))
	screen.blit(background_2,(0,background_y-492))

	pygame.display.update()

pygame.quit() #退出pygame

这样,我们这一次的任务就完成了

想要继续学习pygame和游戏制作的请关注

id:天上的流星

本帖内的所有代码,思想仅供参考,请勿用于商业盈利用途


回复

上一页1 页 / 共 1下一页
天上的流星_tianqiVirus天上的流星_tianqiVirus

顶上重复部分为游戏界面开始前的设定,强调用,如果要复制代码请在第二个import pygame开始

点赞0


评论


海龟本尊2海龟本尊2

这个好棒!!!!!

点赞0


评论


LeoNyfLeoNyf

请问,sublime 3 text 怎么运行代码?emotion_疑问emotion_疑问emotion_疑问

点赞0


评论


LeoNyfLeoNyf

下载链接????

点赞0


评论


LeoNyfLeoNyf

我这个怎么不能运行?center_image

点赞0


评论


奔奔3奔奔3

my computer can't install Pygame

@天上的流星

我家电脑没法装Pygameemotion_编程猫_伤心

点赞0


评论


小驯鹿LR小驯鹿LR

我使用pycharm写的代码,运行后它说

<form id="myform" action="getTranslate.php" method="post" name="myform"> 第4行,在< module >中 pygame.init() #初始化pygame 属性错误:模块“pygame”没有属性“init” 是什么鬼 </form>

点赞0


评论


BYS海阔凭鱼跃天高任鸟飞BYS海阔凭鱼跃天高任鸟飞

我的这个一运行就红

background_1=pygame.image.load("assets/image/background.png")

点赞0


评论


BYS海阔凭鱼跃天高任鸟飞BYS海阔凭鱼跃天高任鸟飞

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


Y速度 = 0
得分 = 0


pygame.init()
screen = pygame.display.set_mode((914,527))
pygame.display.set_caption("Flappy Bird")


sky=pygame.image.load(r"assets\image\Fappy Bird\under the pillars.jpg")


keepGoing = True


sky_y = 20
sky_x = 20


while keepGoing:
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepGoing = False

pygame.display.update()
pygame.quit()

@小鹿工作室_天上的流星

   

点赞0


评论


飞火天703飞火天703

import pygame import random # 随机数
pygame.init() # 初始化pygame screen = pygame.display.set_mode((338, 492)) # 设置屏幕大小 pygame.display.set_caption("飞机大战") # 设置屏幕标题 background_1 = pygame.image.load("C:\\Users\\Administrator\\新建文件夹\\z.png") background_2 = pygame.image.load("C:\\Users\\Administrator\\新建文件夹\\z.png")
keepGoing = True # 控制程序持续运行
while keepGoing:     for event in pygame.event.get(): # 检测鼠标和键盘按下,移动之类的事件         if event.type == pygame.QUIT: # 检测是否按下关闭键             keepGoing = False # 如果是就退出循环     screen.blit(background1, (0, 0))     screen.blit(background2, (0, 0))
    pygame.display.update()

pygame.quit() # 退出pygame     报错了  

点赞0


评论


BYS海阔凭鱼跃天高任鸟飞BYS海阔凭鱼跃天高任鸟飞

我是路过的,问个问题:

center_image

点赞0


评论