python编程小游戏 五子棋,python编程小游戏简单的

news2024/12/22 18:21:40

大家好,本文将围绕python编程小游戏如何停止展开说明,python编程小游戏日语教程是一个很多人都想弄明白的事情,想搞清楚python编程小游戏超级玛丽需要先了解以下几个事情。

今天分享一个有趣的Python游戏库freegames,它里面包含经典小游戏,像贪吃蛇、吃豆人、等等。可以通过1行代码重温这些童年小游戏,后面还会分享源码,可以自己学习游戏编写,相信你会超有成就感!

Paint 涂鸦 在屏幕上绘制线条和形状

单击以标记形状的开始,然后再次单击以标记其结束;

可以使用键盘选择不同的形状和颜色火车头采集器AI伪原创。

!python -m freegames.paint # 如果在命令行,则去掉前面的 感叹号 !

Snake 贪吃蛇 经典的街机小游戏

使用键盘的方向键导航并吃绿色食物,每吃一次食物,蛇就会长一段;

避免吃到自己或越界。

!python -m freegames.snake

 

这个游戏当时玩的时候,都是加速前进!


或许你之前学习过一点编程,但若是你从没接触过游戏编程,那么你现在自己动手尝试模仿编写一下。

选择合适的开发工具

编写游戏之前得挑选一款合适的工具,这样简化程序编写工作。Python语言有很多第三方库都提供游戏编程功能,最有名的要属Pygame库,它提供了丰富的API来实现游戏的各种效果。

设置开发环境

由于Pgzero是Python的第三方库,它不能独立工作,必须在Python代码中来使用,因此我们首先需要安装Python开发环境。可以去Python官网下载最新的安装包进行安装,然后便可以使用Python提供的IDLE编辑器来编写代码了。

准备好后,我们就要开始动手了!先分享一些简单操作的游戏。


贪吃蛇

玩法:童年经典,普通魔术也没啥意思,小时候玩的也是加速的。

 源码分享

import cfg
import sys
import pygame
from modules import *
 
 
'''主函数'''
def main(cfg):
    # 游戏初始化
    pygame.init()
    screen = pygame.display.set_mode(cfg.SCREENSIZE)
    pygame.display.set_caption('Greedy Snake —— 九歌')
    clock = pygame.time.Clock()
    # 播放背景音乐
    pygame.mixer.music.load(cfg.BGMPATH)
    pygame.mixer.music.play(-1)
    # 游戏主循环
    snake = Snake(cfg)
    apple = Apple(cfg, snake.coords)
    score = 0
    while True:
        screen.fill(cfg.BLACK)
        # --按键检测
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if event.key in [pygame.K_UP, pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT]:
                    snake.setDirection({pygame.K_UP: 'up', pygame.K_DOWN: 'down', pygame.K_LEFT: 'left', pygame.K_RIGHT: 'right'}[event.key])
        # --更新贪吃蛇和食物
        if snake.update(apple):
            apple = Apple(cfg, snake.coords)
            score += 1
        # --判断游戏是否结束
        if snake.isgameover: break
        # --显示游戏里必要的元素
        drawGameGrid(cfg, screen)
        snake.draw(screen)
        apple.draw(screen)
        showScore(cfg, score, screen)
        # --屏幕更新
        pygame.display.update()
        clock.tick(cfg.FPS)
    return endInterface(screen, cfg)
 
 
'''run'''
if __name__ == '__main__':
    while True:
        if not main(cfg):
            break

再来一个稍复杂的 !

吃金币

源码分享:

import os
import cfg
import sys
import pygame
import random
from modules import *
 
 
'''游戏初始化'''
def initGame():
    # 初始化pygame, 设置展示窗口
    pygame.init()
    screen = pygame.display.set_mode(cfg.SCREENSIZE)
    pygame.display.set_caption('catch coins —— 九歌')
    # 加载必要的游戏素材
    game_images = {}
    for key, value in cfg.IMAGE_PATHS.items():
        if isinstance(value, list):
            images = []
            for item in value: images.append(pygame.image.load(item))
            game_images[key] = images
        else:
            game_images[key] = pygame.image.load(value)
    game_sounds = {}
    for key, value in cfg.AUDIO_PATHS.items():
        if key == 'bgm': continue
        game_sounds[key] = pygame.mixer.Sound(value)
    # 返回初始化数据
    return screen, game_images, game_sounds
 
 
'''主函数'''
def main():
    # 初始化
    screen, game_images, game_sounds = initGame()
    # 播放背景音乐
    pygame.mixer.music.load(cfg.AUDIO_PATHS['bgm'])
    pygame.mixer.music.play(-1, 0.0)
    # 字体加载
    font = pygame.font.Font(cfg.FONT_PATH, 40)
    # 定义hero
    hero = Hero(game_images['hero'], position=(375, 520))
    # 定义食物组
    food_sprites_group = pygame.sprite.Group()
    generate_food_freq = random.randint(10, 20)
    generate_food_count = 0
    # 当前分数/历史最高分
    score = 0
    highest_score = 0 if not os.path.exists(cfg.HIGHEST_SCORE_RECORD_FILEPATH) else int(open(cfg.HIGHEST_SCORE_RECORD_FILEPATH).read())
    # 游戏主循环
    clock = pygame.time.Clock()
    while True:
        # --填充背景
        screen.fill(0)
        screen.blit(game_images['background'], (0, 0))
        # --倒计时信息
        countdown_text = 'Count down: ' + str((90000 - pygame.time.get_ticks()) // 60000) + ":" + str((90000 - pygame.time.get_ticks()) // 1000 % 60).zfill(2)
        countdown_text = font.render(countdown_text, True, (0, 0, 0))
        countdown_rect = countdown_text.get_rect()
        countdown_rect.topright = [cfg.SCREENSIZE[0]-30, 5]
        screen.blit(countdown_text, countdown_rect)
        # --按键检测
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_a] or key_pressed[pygame.K_LEFT]:
            hero.move(cfg.SCREENSIZE, 'left')
        if key_pressed[pygame.K_d] or key_pressed[pygame.K_RIGHT]:
            hero.move(cfg.SCREENSIZE, 'right')
        # --随机生成食物
        generate_food_count += 1
        if generate_food_count > generate_food_freq:
            generate_food_freq = random.randint(10, 20)
            generate_food_count = 0
            food = Food(game_images, random.choice(['gold',] * 10 + ['apple']), cfg.SCREENSIZE)
            food_sprites_group.add(food)
        # --更新食物
        for food in food_sprites_group:
            if food.update(): food_sprites_group.remove(food)
        # --碰撞检测
        for food in food_sprites_group:
            if pygame.sprite.collide_mask(food, hero):
                game_sounds['get'].play()
                food_sprites_group.remove(food)
                score += food.score
                if score > highest_score: highest_score = score
        # --画hero
        hero.draw(screen)
        # --画食物
        food_sprites_group.draw(screen)
        # --显示得分
        score_text = f'Score: {score}, Highest: {highest_score}'
        score_text = font.render(score_text, True, (0, 0, 0))
        score_rect = score_text.get_rect()
        score_rect.topleft = [5, 5]
        screen.blit(score_text, score_rect)
        # --判断游戏是否结束
        if pygame.time.get_ticks() >= 90000:
            break
        # --更新屏幕
        pygame.display.flip()
        clock.tick(cfg.FPS)
    # 游戏结束, 记录最高分并显示游戏结束画面
    fp = open(cfg.HIGHEST_SCORE_RECORD_FILEPATH, 'w')
    fp.write(str(highest_score))
    fp.close()
    return showEndGameInterface(screen, cfg, score, highest_score)
 
 
'''run'''
if __name__ == '__main__':
    while main():
        pass

游戏虽好,但不要沉迷于此哦!暂时收集整理两个相对容易上手操作的小游戏。

那么以上就是今天的分享,后面还会为大家更新其他的内容。

如果你就得有用记得点赞收藏哦,毕竟我这么优秀以防找不到我~

(以上图片及内容整理于网络,如有侵权联系删除)

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

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

相关文章

前端新手学习路线

文章目录 前端学习路线!特点符号表大纲前言 - 学编程需要的特质一、前端入门⭐️ 开发工具浏览器编辑器文档笔记 ⭐️ HTML⭐️ CSS⭐️ JavaScript✅ ES6 特性 二、巩固基础前端基础知识计算机基础✅ 算法和数据结构✅ 计算机网络✅ 操作系统 软件开发基础✅ 设计模…

Kafka 入门到起飞 - 什么是 HW 和 LEO?何时更新HW和LEO呢?

上文我们已经学到, 一个Topic(主题)会有多个Partition(分区)为了保证高可用,每个分区有多个Replication(副本)副本分为Leader 和 Follower 两个角色,Follower 从Leader同…

【数据结构】实现顺序表

目录 一.介绍顺序表二.实现顺序表1.创建多文件2.顺序表的存储方式3.函数的声明4.初始化顺序表5.清理顺序表6.打印顺序表7.扩容8.尾插8.尾删9.头插10.头删11.查找12.修改13.在pos位置插入13.在pos位置删除 三.全部代码1.SeqList.h2.SeqList.c3.Test.c 一.介绍顺序表 顺序表是用…

【佳佳怪文献分享】使用点云从半监督到全监督房间布局估计

标题:From Semi-supervised to Omni-supervised Room Layout Estimation Using Point Cloud 作者:Huan-ang Gao, Beiwen Tian, Pengfei Li, Xiaoxue Chen, Hao Zhao, Guyue Zhou , Yurong Chen and Hongbin Zha 来源:2023 IEEE Internation…

Android系统-线程-消息处理机制

引言: Android应用消息处理机制是怎么样的呢? 跟Native,Linux底层都有些什么关系呢? 概念与理解: Android应用程序是通过消息来驱动的。 1)应用程序的每一个线程在启动的时候,都可以首先在内…

Swagger-ui在idea中的使用

1.添加依赖 <!--添加swagger2相关概念--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!--添加swagger-ui相关功能--><de…

【贪心+堆】CF1701 D

Problem - 1701D - Codeforces 题意&#xff1a; 思路&#xff1a; 手推样例可知&#xff1a; 一开始想的是&#xff0c;把这些区间按右端点排序&#xff0c;然根据排序后的贪心 事实上不是这样的&#xff0c;而是要把有可能的区间扔进堆里&#xff1a; 感觉这种带堆的贪心&…

【TI-CCS笔记】工程编译配置 bin文件的编译和生成 各种架构的Post-build配置汇总

【TI-CCS笔记】工程编译配置 bin文件的编译和生成 各种架构的Post-build配置汇总 TI编译器分类 在CCS按照目录下 有个名为${CG_TOOL_ROOT}的目录 其下就是当前工程的编译器 存放目录为&#xff1a; C:\ti\ccs1240\ccs\tools\compiler按类型分为五种&#xff1a; ti-cgt-arm…

J‘meter 连接 MySQL 数据库脚本

1、创建线程组 2、创建 JDBC Connection Configuration 3、创建 JDBC Request 4、最终创建的目录 5、重点来了 5.1 在百度中下载个 MySQL-connector-Java-8.0.28.jar&#xff0c;放在 jmeter 的 bin 目录下 5.2 在测试计划中&#xff0c;将 jar 包添加到脚本中 5.3 输入参…

如何查看mysql中各个表的数据大小

1.SHOW VARIABLES LIKE datadir; 这会显示 MySQL 数据目录的路径。在这个路径下&#xff0c;你可以找到每个数据库的文件夹&#xff0c;每个数据库文件夹中会包含各个表的 .ibd 文件。 2.进入对应的目录 3.进入对应的db&#xff0c;例如我自己的db为test 4.如果我们想以M为单…

在Gazebo中添加悬浮模型后,利用键盘控制其移动方法

前段时间写了文章&#xff0c;通过修改sdf、urdf模型的方法&#xff0c;在Gazebo中添加悬浮模型方法 / Gazebo中模型如何不因重力下落&#xff1a;在Gazebo中添加悬浮模型方法 / Gazebo中模型如何不因重力下落&#xff1a;修改sdf、urdf模型_sagima_sdu的博客-CSDN博客 今天讲…

2401. 最长优雅子数组;1111. 有效括号的嵌套深度;2134. 最少交换次数来组合所有的 1 II

2401. 最长优雅子数组 核心思想&#xff1a;滑动窗口。如何知道当前值与以前的值是否and为0很重要&#xff0c;这是这道题目的关键&#xff0c;and操作会把1变成0&#xff0c;但是不会把0变成1&#xff0c;所以当前值x要和前面的值两两and为0意味着&#xff0c;你要使前面的值…

Vim的插件管理器之Vundle

1、安装Vundle插件管理器 Vim可以安装插件&#xff0c;但是需要手动安装比较麻烦&#xff0c;Vim本身没有提供插件管理器&#xff0c;所以会有很多的第三方的插件管理器&#xff0c;有一个vim的插件叫做 “vim-easymotion”&#xff0c;在它的github的安装说明里有列出对于不同…

比ChatGPT更强的星火大模型V2版本发布!

初体验 测试PPT生成 结果&#xff1a; 达到了我的预期&#xff0c;只需要微调就可以直接交付&#xff0c;这点比ChatGPT要强很多. 测试文档问答 结果&#xff1a; 这点很新颖&#xff0c;现在类似这种文档问答的AI平台收费都贵的离谱&#xff0c;星火不但免费支持而且效果也…

vue项目报错:node:internal/modules/cjs/loader:1080

运行项目报错&#xff1a; 原因&#xff1a; 看划线的地方&#xff0c;中文乱码导致找不见模块了 解决方案 将路径上的中文改为英文即可&#xff0c;项目命名最好只有英文、下划线&#xff08;_&#xff09;、数字、横杠&#xff08;-&#xff09;等英文符号组成

MATLAB图形窗口固定

起因是上次作图的时候写了&#xff1a; clc clear close all 这三个典型的刷新语句 清空工作区、命令行并且关闭图窗 就导致每次我把图窗拉到合适的位置观察&#xff0c;再一次点击运行都会重新刷新在出生点&#xff08;x&#xff09; 所以想把图窗固定在某个位置 显然更…

解决爬虫上下行传输效率问题的实用指南

嗨&#xff0c;大家好&#xff01;作为一名专业的爬虫程序员&#xff0c;我们经常会面临上下行传输效率低下的问题。在处理大量数据时&#xff0c;如果传输效率不高&#xff0c;可能会导致爬虫任务速度慢&#xff0c;甚至中断。今天&#xff0c;我将和大家分享一些解决爬虫上下…

深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)

目录 深度优先搜索&#xff08;DFS、深搜&#xff09;和广度优先搜索&#xff08;BFS、广搜&#xff09; 深度优先搜索&#xff08;简称“深搜”或DFS&#xff09; 广度优先搜索 总结 深度优先生成树和广度优先生成树 非连通图的生成森林 深度优先生成森林 广度优先生成…

Python系统学习1-9-类(一)

一、类之初印象 1、类就是空表格&#xff0c;将变量&#xff08;列名&#xff09;和函数&#xff08;行为&#xff09;结合起来 2、创建对象&#xff0c;表达具体行 3、创建类就是创建数据的模板 --操作数据时有提示 --还能再组合数据的行为 --结构更加清晰 4、类的内存分配…

人工智能原理(5)

目录 一、不确定性推理 1、不确定性推理含义 2、知识不确定性的来源 3、不确定推理要解决的基本问题 4、不确定性推理方法分类 二、主观贝叶斯方法 1、主观贝叶斯方法 2、知识不确定性的表示 3、证据 4、不确定性的更新 三、可信度方法 1、可信度模型 2、性质 3、…