IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 树莓派基于PS2操纵杆的飞机大战小游戏 -> 正文阅读

[游戏开发]树莓派基于PS2操纵杆的飞机大战小游戏

击中病毒LED灯闪烁
PS2操纵杆、PCF8591
PCF8591:
SDA - SDA
SCL - SCL
VCC - 5V
GND - GND
AIN1、AIN2、AIN3找空插即可

PS2操纵杆:
VRx - AIN1
VRy - AIN0
SW - AIN2
VCC - 3.3V
GND - GND

LED灯:
-一 接 17

  • S 接18
  • GND 接GND
    病毒自由掉落,子弹一直发射
    算是个初级版吧,还有很多功能可以完善
    代码如下:
import RPi.GPIO as GPIO
import PCF8591 as ADC
import pygame
import random
import sys
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17, GPIO.OUT)
pygame.init()
CREAT_VIRUS_EVENT = pygame.USEREVENT  # # 用户自定义事件
pygame.time.set_timer(CREAT_VIRUS_EVENT, 500)
Shoot = pygame.USEREVENT + 1
pygame.time.set_timer(Shoot, 200)
bg = pygame.image.load("/home/pi/CLBDEMO/飞机大战/bg.png")
bullet = pygame.image.load("/home/pi/CLBDEMO/飞机大战/bullet.png")
plane = pygame.image.load("/home/pi/CLBDEMO/飞机大战/plane.png")
virus = pygame.image.load("/home/pi/CLBDEMO/飞机大战/virus.png")
screen = pygame.display.set_mode((480, 550))
pygame.display.set_caption("打飞机")
x = 195
y = 476
posplan = (x, y)
screen.blit(bg, (0, 0))
screen.blit(plane, posplan)
pygame.display.update()
clock = pygame.time.Clock()
state = 'ready'
score = 0
# # 病毒的初始y坐标
vy = 0
lstb = []
lstv = []

def setup():
	ADC.setup(0x48)					# Setup PCF8591
setup()
fonta = pygame.font.SysFont('arial', 25)
sco = fonta.render('SCORE:', True, (255, 255, 255))
while True:
    GPIO.output(17, GPIO.HIGH)
    clock.tick(500)
    screen.blit(bg, (0, 0))
    screen.blit(plane, (x, y))
    screen.blit(sco, (150, 250))
    num = fonta.render(str(score), True, (255, 255, 255))
    screen.blit(num, (260, 250))
    if state == 'ready':
        score = 0
        flag = True
        x = 195
        y = 476
        screen.blit(bg, (0, 0))
        screen.blit(plane, (x, y))
        pygame.display.update()
    # # 子弹向前飞
    for i in lstb:
        i[1] -= 5
    for i in lstb:
        screen.blit(bullet, i)
        if i[1] <= 0: # # lim
            lstb.remove(i)
    # # 病毒往下坠,病毒出界则游戏状态变为ready
    for i in lstv:
        i[1] += 1
    for i in lstv:
        screen.blit(virus, i)
        if i[1] >= 476:
            print("病毒触底,英雄失败!再接再厉,再创辉煌!")
            print(score)
            flag = False
            state = 'ready'
            break
    for j in lstv:
        for i in lstb:
            if j[1] >= 0 and j[0] <= i[0] <= j[0] + virus.get_width() and j[1] < i[1] < j[1] + virus.get_height():
                lstb.remove(i)
                lstv.remove(j)
                GPIO.output(17, GPIO.LOW)
                time.sleep(0.05)
                score += 1
    # # 除了从天而降都可以碰撞
    for i in lstv:
        if i[0] <= x <= i[0]+virus.get_width() and i[1] <= y <= i[1]+virus.get_height():
            print("飞机碰到病毒,失败了!")
            print(score)
            flag = False
            state = 'ready'
            break
        if  i[0] <= x + plane.get_width() <= i[0]+virus.get_width() and i[1] <= y <= i[1]+virus.get_height():
            print("飞机碰到病毒,失败了!")
            print(score)
            flag = False
            state = 'ready'
            break
    for event in pygame.event.get():
        stepx = 0
        stepy = 0
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            state = 'running'
        if state == 'running':
            # # 随机生成病毒
            if event.type == CREAT_VIRUS_EVENT:
                lstv.append([random.randint(0, bg.get_width() - virus.get_width()), 0])
            # # 控制子弹飞行
            xb = x + plane.get_width()/2.6
            yb = y - bullet.get_height()
            if event.type == Shoot:
                lstb.append([xb, yb])
            # # 控制飞机移动
            if ADC.read(1) <= 5:
                if x > 0:
                    x -= 25
            if ADC.read(1) >= 250:
                if x + plane.get_width() < bg.get_width():
                    x += 25
            if ADC.read(0) <= 5:
                if y >= 0:
                    y -= 25
            if ADC.read(0) >= 250:
                if y + plane.get_height() < 550:
                    y += 25
    if flag == False:
        lstv.clear()  # # 出现问题以后把病毒列表清空
        lstb.clear()
    pygame.display.update()
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 13:04:32  更:2021-07-30 13:05:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 23:48:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码