学习 Python 之 Pygame 开发坦克大战(一)

news2024/9/26 5:14:44

学习 Python 之 Pygame 开发坦克大战(一)

  • Pygame
    • 什么是Pygame?
    • 初识pygame
      • 1. 使用pygame创建窗口
      • 2. 设置窗口背景颜色
      • 3. 获取窗口中的事件
      • 4. 在窗口中展示图片
        • (1). pygame中的直角坐标系
        • (2). 展示图片
        • (3). 给部分区域设置颜色
      • 5. 在窗口中显示文字
      • 6. 播放音乐

Pygame

什么是Pygame?

Pygame是一组Python用于编写视频游戏的模块。Pygame在优秀的SDL库上添加了功能。可以让我们使用python语言创建功能齐全的游戏和多媒体程序,并且Pygame是高度可移植的,几乎可以在所有平台和操作系统上运行。

初识pygame

官方文档

函数名称作用返回值
pygame.display.init()初始化展示模块None
pygame.display.set_mode(size = (0, 0))初始化窗口(窗口就是一个Surface对象)Surface
pygame.display.set_caption(title, icontitle = None)设置窗口标题和图标None
pygame.Surface.fill(color, rect = None)用纯色填充表面Surface对象None
pygame.Color(b, g, r)创建用于颜色表示的Pygame对象Color
pygame.display.update()更新屏幕None
pygame.event.get()获取事件队列Eventlist
pygame.image.load(filename)从文件加载图片(图片跟窗口一样,也是Surface对象)Surface
pygame.Surface.get_rect()获取Surface对象的rect属性Rect
pygame.Surface.blit(source, dest, area = None)在一个Surface对象上显示另一个Surface对象Rect
pygame.font.init()初始化字体模块None
pygame.font.SysFont(name, size, bold = False, italic = False)从系统字体创建字体对象Font
pygame.font.render(text, antialias, color, background = None)创建一个带有指定字体的Surface对象Surface
pygame.mixer.init()初始化混合器模块None
pygame.mixer.Sound(filename)从文件创建声音对象Sound
pygame.mixer.Sound.play(loops = 0, maxtime = 0)播放音乐,loops参数控制播放次数,播放次数为loops + 1次。默认为0,表示声音不会重复,只播放一次。如果loops为-1,声音将无限循环Channel
pygame.mixer.Sound.stop()声音停止播放None
pygame.mixer.Sound.set_volume(value)设置音量None

1. 使用pygame创建窗口

import pygame


# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Tank Battle')

创建结果
在这里插入图片描述

2. 设置窗口背景颜色

# 设置窗口背景颜色
blue = 255
green = 0
red = 255
BACKGROUND_COLOR = pygame.Color(blue, green, red)
window.fill(BACKGROUND_COLOR)

# 更新窗口
pygame.display.update()

完整代码

import pygame

# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Tank Battle')

# 设置窗口背景颜色
blue = 255
green = 0
red = 255
BACKGROUND_COLOR = pygame.Color(blue, green, red)
window.fill(BACKGROUND_COLOR)

# 更新窗口
pygame.display.update()

在这里插入图片描述
不要忘记更新窗口,否则不会显示颜色的

3. 获取窗口中的事件

def getWindowEvent():
    for event in pygame.event.get():
        # 点击窗口右上角的关闭触发的事件
        if event.type == pygame.QUIT:
            sys.exit()
        # 鼠标按下事件
        elif event.type == pygame.MOUSEBUTTONDOWN:
            x, y = event.pos
            print('鼠标按下, 鼠标位置({x}, {y})'.format(x = x, y = y))
        # 鼠标抬起事件
        elif event.type == pygame.MOUSEBUTTONUP:
            print('鼠标抬起')
        # 键盘按键按下事件
        elif event.type == pygame.KEYDOWN:
            print('键盘按键按下')
            # 具体键盘事件触发
            if event.key == pygame.K_j:
                print('按下键盘 j 键')
        # 键盘按键抬起事件
        elif event.type == pygame.KEYUP:
            print('键盘按键抬起')

完整代码

import pygame
import sys

def getWindowEvent():
    for event in pygame.event.get():
        # 点击窗口右上角的关闭触发的事件
        if event.type == pygame.QUIT:
            sys.exit()
        # 鼠标按下事件
        elif event.type == pygame.MOUSEBUTTONDOWN:
            x, y = event.pos
            print('鼠标按下, 鼠标位置({x}, {y})'.format(x = x, y = y))
        # 鼠标抬起事件
        elif event.type == pygame.MOUSEBUTTONUP:
            print('鼠标抬起')
        # 键盘按键按下事件
        elif event.type == pygame.KEYDOWN:
            print('键盘按键按下')
            # 具体键盘事件触发
            if event.key == pygame.K_j:
                print('按下键盘 j 键')
        # 键盘按键抬起事件
        elif event.type == pygame.KEYUP:
            print('键盘按键抬起')

# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Tank Battle')

# 设置窗口背景颜色
blue = 255
green = 0
red = 255
BACKGROUND_COLOR = pygame.Color(blue, green, red)
window.fill(BACKGROUND_COLOR)

while 1:
    # 获取键盘事件
    getWindowEvent()

    # 更新窗口
    pygame.display.update()

运行后按下鼠标左键,键盘j键,键盘s键

在这里插入图片描述

系统的事件都具有一组成员属性。下面是事件类型及其特定属性的列表图(图片来源链接)
在这里插入图片描述

4. 在窗口中展示图片

(1). pygame中的直角坐标系

在这里插入图片描述

(2). 展示图片

import pygame


# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Tank Battle')

# 设置图片路径
path = './picture.jpg'
# 加载图片
image = pygame.image.load(path)
# 获取直角坐标
rect = image.get_rect()
# 设置图片的位置,在(0,0)处加载图片
rect.left = 0
rect.top = 0
# 在窗口显示
window.blit(image, rect)

# 更新窗口
pygame.display.update()

运行结果(图片太大了,超过了窗口的尺寸)
在这里插入图片描述

(3). 给部分区域设置颜色

import pygame

# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Tank Battle')

# 设置窗口背景颜色
blue = 255
green = 0
red = 255
BACKGROUND_COLOR = pygame.Color(blue, green, red)
window.fill(BACKGROUND_COLOR)

# 给部分区域设置颜色
rect = pygame.Rect(400, 400, 50, 50)
REGION_COLOR = pygame.Color(50, 50, 150)
window.fill(REGION_COLOR, rect)

# 更新窗口
pygame.display.update()

在这里插入图片描述

5. 在窗口中显示文字

import pygame


# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Tank Battle')

# 设置文字内容
text = 'Hello Pygame'

# 初始化字体
pygame.font.init()
# 设置文字字体和大小
fontSize = 16
font = pygame.font.SysFont('georgia', fontSize)
# 加载文字并设置颜色
fontColor = pygame.Color(255, 255, 255)
fontObject = font.render(text, True, fontColor)
# 设置展示位置
position = (50, 50)
# 展示文字
window.blit(fontObject, position)

# 更新窗口
pygame.display.update()

运行结果
在这里插入图片描述

6. 播放音乐

import pygame


# 初始化混合器模块
pygame.mixer.init()
# 加载音乐
sound = pygame.mixer.Sound('./star.wav')
# 播放音乐
sound.play()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/354495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis 之三(查询操作 占位符#{} 与 ${}、like查询、resultMap、association、collection)

文章目录1. 参数占位符 #{} 和 ${} 的区别2. ${} 的优点3. SQL 注入问题4. like 查询5. 返回字典映射:resultMap6. 一对一查询:association7. 一对多查询:collection回顾一下,在上一篇 MyBatis 之二(增、删、改操作&am…

APP测试中IOS和Android的区别,有哪些注意点?

01、常识性区别 02、导航方式 iOS:Tab放在页面底部,不能通过滑动来切换,只能点击。也有放在上面的,也不能滑动,但有些Tab本身可以滑动,比如天猫的。还有新闻类的应用。 Android:一般放在页面…

Visual Studio 高级调试-(上)

概述编程圈子里隔三差五的就会有场“谁是最强IDE”之争,重要的是我们需要对使用的IDE有充分的了解,正所谓工欲善其事,必先利其器。本文主要讲述Visual Studio常用的调试技巧,包括多类型断点,数据监视,以及多…

MySQL ---基础概念

目录 餐前小饮:什么是服务器?什么是数据库服务器? 一、数据库服务软件 1. 常见数据库产品 2.如何开启和停止MySQL服务 二、数据库术语及语法 1.数据库术语 2.SQL语法结构 3.SQL 语法要点 三、SQL分类 1.数据定义语言(D…

LeetCode——1237. 找出给定方程的正整数解

一、题目 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/find-positive-integer-solution-for-a-given-equation/description/ 翻译一下题目 意思是,这是一个二维单调递增的函数,函数一共有 9 …

快速上手GoWeb开发之Gin框架

Go是一门正在快速增长的编程语言,专为构建简单、快速且可靠的软件而设计。 golang提供的net/htp库已经很好了,对于htp的协议的实现非常好,基于此再造框架,也不会是难事,因此生态中出现了很多框架。 Gin: Go 语言编写的…

智能洗地机什么牌子好?智能洗地机排行

要说家庭清洁热门的产品,洗地机肯定首当其冲,集洗吸拖为一体的清洁工具,省时又省力,可谓是家里清洁好助手,今天笔者就为大家介绍几款重量轻、噪音轻、拖地干净的洗地机! 一、CEYEE希亦T800洗地机 在国内,洗…

13.进程---

一、进程的概念 1.可以用ps或top查看进程 2.pid0;交换进程(作用是进程调度) pid1;init进程(作用是系统初始化) 3.getpid();//获取自身的进程标识符 4.getppid();//获取父进程的进程标识符 什么是父进程? 答&#x…

【GStreamer 】 TX1中CPU和GPU解码显示海康相机RTSP流

大家好,我是虎哥,今天找了一套海康的相机,想后续测试一下DeepStream用网络相机RTSP流做输入看看后续目标识别和分类。但是还是想先实时看看视频,当然,可以选择VLC去查看,顺道我也用GStreamer 来测试了一下&…

HashMap原理详解

一、hashmap简介 hashmap是Java当中一种数据结构,是一个用于存储Key-Value键值对的集合,每一个键值对也叫作Entry。 二、JDK7的HashMap1、JDK7时HashMap的数据结构 1、在JDK7之前,hashmap底层采用数组链表的数据结构来存储数据 2、插入数据采…

SpringBoot静态资源访问

静态资源路径 类路径下:/resources/static/、/resources/public/、/resources/resources/、/resources/META-INF/resources 这些路径下的资源均可直接访问;通过 http://ip:port/资源名称 访问即可 可在配置文件中对访问路径和访问拦截规则进行设置&…

【ArcGIS Pro二次开发】(5):UI管理_自定义控件的位置

新增的自定义控件一般放在默认的【加载项】选项卡下,但是根据需求,我们可能需要将控件放在新的自定义选项卡下,在自定义选项卡添加系统自带的控件,将自定义的按钮等控件放在右键菜单栏里以方便使用,等等。 下面就以一…

Maven:工程的拆分与聚合

Maven 拆分与聚合创建父工程创建子模块pom.xml配置示例拆分与聚合 在 Maven 中, 拆分是将一个完整的项目分成一个个独立的小模块,聚合是将各个模块进一步组合,形成一个完整的项目。接下来简单示例拆分与聚合的过程。 创建父工程 父工程,一个pom工程,目录结构简单,只需有…

cocos2dx 4.0 - cpp - pc版 环境搭建

开发环境vs2022 cocos2dx4.0 python2.7.18 cmake3.25安装教程(环境搭建)安装VS2022-Community, 勾选c进行安装安装cmake3.25, 勾选环境变量进行安装安装python2.7.18, 勾选环境变量进行安装下载cocos2dx4.0并解压配置cocos2dx:运行cmd,进入…

DCL 数据控制语言

1、简介 DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限。 2、管理用户 2.1 查询用户 select * from mysql.user;查询的结果如下: 其中 Host代表当前用户访问的主机, 如果为localhost, 仅代表只能够在当前本机访问…

Nuxtjs

SSR渲染 SSR:在服务器端将Vue渲染成HTML返回给浏览器 优点 对SEO支持好SPA单页渲染更快 npx create-nuxt-app nuxtDemo 修改开发地址 package.json文件中进行修改 "config":{"nuxt":{"host":"127.0.0.1","port…

朋友当上项目测试组长了,我真的羡慕了

最近我发现一个神奇的事情,我一个朋友居然已经当上了测试项目组长,据我所知他去年还是在深圳的一家创业公司做苦逼的测试狗,短短8个月,到底发生了什么? 于是我立刻私聊他八卦一番。 原来他所在的公司最近正在裁员&am…

01_Docker 简介

01_Docker 简介 文章目录01_Docker 简介1.1 Docker 简介1.2 Docker 组件1.2.1 Docker 客户端和服务区1.2.2 Docker 镜像1.2.3 Registry1.2.4 Docker 容器参考资料https://www.runoob.com/docker/ubuntu-docker-install.html 1.1 Docker 简介 Docker 是一个能够把开发的应用程…

HTML+CSS+JavaScript学习笔记~ 从入门到精通!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、HTML1. 什么是HTML&#xff1f;一个完整的页面&#xff1a;<!DOCTYPE> 声明中文编码2.HTML基础①标签头部元素标题段落注释水平线文本格式化②属性3.H…

SOFA Weekly|开源人、本周贡献 issue 精选

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展欢迎留言互动&#xff5e;SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&#…