Python之freegames 零代码的22个小游戏集合

Python之freegames 零代码的22个小游戏集合是一个Python项目,包含22个小游戏,每个游戏都可以零代码运行。本文将详细讲解如何下载、安装和运行这个项目,并以两个游戏为例进行说明。

下载与安装

  1. 下载项目

在GitHub上下载该项目的压缩文件,或使用git clone命令将项目克隆到本地:

git clone https://github.com/grantjenks/free-python-games
  1. 安装依赖

进入项目目录后,使用以下命令安装依赖:

pip install -r requirements.txt

运行游戏

在项目目录下,找到想要运行的游戏的.py文件,使用Python命令即可运行,例如:

python3 sudoku/sudoku.py

游戏示例

小蛇游戏

小蛇游戏的.py文件位于snake/目录下,文件名为snake.py。运行该文件即可启动小蛇游戏。

游戏规则:

  1. 使用键盘上的方向键控制蛇的移动方向;
  2. 吃到食物后蛇的长度增加,分数增加;
  3. 如果蛇碰到边界或者自己的身体,则游戏结束。

示例代码:

from random import randrange
from turtle import *
from freegames import square, vector

food = vector(0, 0)
snake = [vector(10, 0)]
aim = vector(0, -10)

def change(x, y):
    "Change snake direction."
    aim.x = x
    aim.y = y

def inside(head):
    "Return True if head inside boundaries."
    return -200 < head.x < 190 and -200 < head.y < 190

def move():
    "Move snake forward one segment."
    head = snake[-1].copy()
    head.move(aim)

    if not inside(head) or head in snake:
        square(head.x, head.y, 9, 'red')
        update()
        return

    snake.append(head)

    if head == food:
        print('Snake:', len(snake))
        food.x = randrange(-15, 15) * 10
        food.y = randrange(-15, 15) * 10
    else:
        snake.pop(0)

    clear()

    for body in snake:
        square(body.x, body.y, 9, 'black')

    square(food.x, food.y, 9, 'green')
    update()
    ontimer(move, 100)

setup(420, 420, 370, 0)
hideturtle()
tracer(False)
listen()
onkey(lambda: change(10, 0), 'Right')
onkey(lambda: change(-10, 0), 'Left')
onkey(lambda: change(0, 10), 'Up')
onkey(lambda: change(0, -10), 'Down')
move()
done()

Ping-pong游戏

Ping-pong游戏的.py文件位于pong/目录下,文件名为pong.py。运行该文件即可启动Ping-pong游戏。

游戏规则:

  1. 使用键盘上的ws键控制左侧板子的上下移动,使用ik键控制右侧板子的上下移动;
  2. 通过控制板子使得球不超出边界和被挡住;
  3. 根据打球方向,球会改变方向。

示例代码:

from random import choice
from turtle import *
from freegames import vector

def value():
    "Randomly generate value between (-5, -3) or (3, 5)."
    return (3 + choice(range(5))) * [-1, 1][choice([0, 1])]

ball = vector(0, 0)
aim = vector(value(), value())
state = {1: 0, 2: 0}

def move(player):
    "Move ball and check for collisions."
    ball.move(aim)

    if ball.x < -200 or ball.x > 200:
        aim.x = -aim.x
        state[player] += 1

    if ball.y < -200 or ball.y > 200:
        aim.y = -aim.y

    goto(ball.x, ball.y)
    dot(10)

    return state[player]

def power(x, y, w, h):
    "Create and return a turtle with customized attributes."
    t = Turtle(visible=False)
    t.speed(0)
    t.penup()
    t.goto(x, y)
    t.shape('square')
    t.shapesize(w, h)
    t.fillcolor('white')
    t.showturtle()
    return t

def final_scores():
    "Display the final scores."
    clear()
    goto(-100, 0)
    write(f'Player 1: {state[1]}   Player 2: {state[2]}', font=('Arial', 30, 'normal'), align='center')

def winner():
    "Display winner."
    clear()
    winner = 1 if state[1] > state[2] else 2
    goto(-100, 0)
    write(f'Player {winner} Wins!', font=('Arial', 30, 'normal'), align='center')

# Set up game board
setup(420, 420, 370, 0)
hideturtle()
tracer(False)
window = Turtle(visible=False)
window.penup()
window.goto(0, 200)
window.write("Python Pong", align="center", font=("Courier", 24, "normal"))
window.goto(170, -195)
window.write("Player 1", align="center", font=("Courier", 14, "normal"))
window.goto(-150, -195)
window.write("Player 2", align="center", font=("Courier", 14, "normal"))
window.goto(-145, 185)
window.write("Python Pong", align="center", font=("Courier", 14, "normal"))

# Draw game board
l1 = power(-220, 20, 1, 10)
l2 = power(-220, -20, 1, 10)
r1 = power(220, 20, 1, 10)
r2 = power(220, -20, 1, 10)

# Game loop
while abs(ball.x) < 200 and abs(ball.y) < 200:
    if l1.distance(ball) < 15:
        aim.x = -aim.x
        state[1] += 1

    if l2.distance(ball) < 15:
        aim.x = -aim.x
        state[1] += 1

    if r1.distance(ball) < 15:
        aim.x = -aim.x
        state[2] += 1

    if r2.distance(ball) < 15:
        aim.x = -aim.x
        state[2] += 1

    delay = abs(int(25 - (move(1) + move(2))/2))
    ontimer(1, lambda:None)

if state[1] == 10 or state[2] == 10:
    winner()
else:
    final_scores()

done()

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python之freegames 零代码的22个小游戏集合 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • JS事件Event元素(兼容IE,Firefox,Chorme)

    JS事件主要用于对网页用户交互的响应,如用户的点击、鼠标滑动、键盘输入等。JS事件包括文档事件和元素事件两种类型,其中元素事件又分为鼠标事件、键盘事件和HTML事件三种类型。本篇文章将综合讲解JS事件元素的用法,并给出两个兼容IE、Firefox、Chrome的示例说明。 一、元素事件的绑定和触发 1.1 事件绑定 事件绑定是指将事件与元素相连的过程。事件绑…

    python 2023年6月13日
    00
  • 测试、预发布后用python检测网页是否有日常链接

    测试、预发布后用Python检测网页是否有日常链接攻略 在测试、预发布环境中,我们需要检测网页是否有日常链接。本攻略将介绍如何使用Python检测网页是否有日常链接,包括获取网页源代码、解析HTML、检测链接等操作。 步骤1:获取网页源代码 在Python中,我们可以使用requests库获取网页源代码。以下是获取网页源代码的示例代码: import req…

    python 2023年5月15日
    00
  • python 有效的括号的实现代码示例

    关于“Python 有效的括号的实现代码示例”的完整攻略,可以按照以下步骤展开: 问题分析 在开始本题的代码实现之前,我们需要先从问题出发,理清楚本题的需求和限制条件: 需求:判断输入的字符串是否有效的括号组合。当字符串满足下面条件之一时,才被认为是有效的括号组合: 所有括号必须关闭。 括号必须以正确的顺序关闭。 限制:输入的字符串只包含 ‘(‘, ‘)’,…

    python 2023年5月31日
    00
  • Python还能这么玩之只用30行代码从excel提取个人值班表

    下面是详细的解释和示例: 标题 本文将会介绍如何使用Python从Excel表格中提取个人值班表,只需30行代码即可实现。本文主要分为以下几个步骤: 准备工作 导入所需库 读取Excel表格数据 处理数据 输出数据 准备工作 首先,需要准备好一个Excel表格,里面包含了个人值班表的数据。可以直接使用现成的Excel表格,也可以自己创建Excel表格并填充数…

    python 2023年5月13日
    00
  • Python多线程与同步机制浅析

    Python多线程与同步机制浅析 在Python中,多线程是一种非常常见的并发编程方式。多线程可以提高程序的执行效率,但同时也会带来一些问题,如线程安全、死锁等。为了解决这些问题,我们需要使用同步机制来保证线程之间的协调和安全。 多线程 多线程是在一个程序中同时运行多个线程,每个线程都可以独立执行不同的任务。多线程可以提高程序的执行效率,特别是在处理I/O密…

    python 2023年5月14日
    00
  • 详解python:time模块用法

    详解Python:time模块用法 简介 Python中的time模块是处理时间的模块。它提供了获取时间、时间格式化、睡眠等功能。在本文中,我们将详细讲解time模块的用法,包括获取当前时间、获取时间戳、时间格式化、时间周期、睡眠等内容。 函数和属性 以下是time模块提供的常用函数和属性: time.altzone:返回格林威治西部夏令时(DST)的偏移秒…

    python 2023年6月2日
    00
  • pycharm部署django项目到云服务器的详细流程

    下面是“pycharm部署django项目到云服务器的详细流程”的完整攻略: 准备工作 云服务器:你需要一个云服务器,具体可以选择阿里云、腾讯云等云服务商。并且在云服务器上开启相应的端口,例如80端口,用于访问网页。 pycharm:推荐使用最新版的pycharm实现部署。 django项目:已经开发完成的django项目,并且可以在本地没有问题地运行。 部…

    python 2023年5月13日
    00
  • 获取与请求不一致的频道 ID(python)

    【问题标题】:Get Channel Id discord with request (python)获取与请求不一致的频道 ID(python) 【发布时间】:2023-04-06 14:58:01 【问题描述】: def send_dm(): token = ‘i know, just not putting my token here’ message…

    Python开发 2023年4月7日
    00
合作推广
合作推广
分享本页
返回顶部