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

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

1. 介绍

Python之freegames是一个由Python语言实现的,由22个小游戏组成的集合。这些游戏非常容易上手,因为它们都是使用Python标准库和freegames模块编写的。更重要的是,它们没有任何代码,因此无需担心程序语法错误或逻辑错误。

这些游戏的难度各不相同,既有简单的,也有复杂的。这些游戏包括连连看、2048、弹球、跳跃方块等。

2. 安装

安装Python,访问 https://www.python.org/downloads/ 查找相应版本。

在终端中输入以下命令来安装 freegames

pip install freegames

3. 游戏示例

  1. 连连看
from random import randrange
from turtle import *
from freegames import line

def grid():
    "Draw tic-tac-toe grid."
    line(-67, 200, -67, -200)
    line(67, 200, 67, -200)
    line(-200, -67, 200, -67)
    line(-200, 67, 200, 67)

def drawx(x, y):
    "Draw X player."
    line(x, y, x + 133, y + 133)
    line(x, y + 133, x + 133, y)

def drawo(x, y):
    "Draw O player."
    up()
    goto(x + 67, y + 5)
    down()
    circle(62)

def floor(value):
    "Round value down to grid with square size."
    return ((value + 200) // 133) * 133 - 200

state = {'player': 0}
players = [drawx, drawo]

def tap(x, y):
    "Draw X or O in tapped square."
    x = floor(x)
    y = floor(y)
    player = state['player']
    draw = players[player]
    draw(x, y)
    update()
    state['player'] = not player

def draw():
    "Draw slightly thick tic-tac-toe grid."
    pensize(5)
    grid()
    pensize(1)
    hideturtle()
    tracer(False)
    update()
    onscreenclick(tap)
    done()

draw()

在命令行中输入该代码即可开始游戏。

  1. 2048
"""
2048 5x5 grid version by Filipe Kiss <filipe.kiss@gmail.com>
"""

from itertools import *
from random import *
import os
import sys
import tty
import termios
import atexit

def display(game):
    size = len(game)
    for i in range(size):
        for j in range(size):
            v = game[i][j]
            print("+------", end="")
        print("+")
        for j in range(size):
            v = game[i][j]
            print("|{0: ^6}".format(v), end="")
        print("|")
    for j in range(size):
        print("+------", end="")
    print("+")

def axisRotation(game):
    lines = []
    size = len(game)
    for i in range(size):
        line = []
        for j in range(size):
            line.append(game[size-j-1][i])
        lines.append(line)
    return lines 

def collapse(line):
    def collapsePairs(line):
        i = 1
        while i < len(line):
            if line[i] == line[i-1]:
                line[i-1] += 1
                line[i] = 0
            i += 1
        return line

    res = []
    for i in range(len(line)):
        if line[i] > 0:
            res.append(line[i])
    res = collapsePairs(res)
    while len(res) < len(line):
        res.append(0)

    return res

def slide(game, direction):
    axis = game
    if direction == 'w':     
        axis = axisRotation(game)
        axis = list(transpose(collapse(transpose(axis))))

        axis = axisRotation(axisRotation(axisRotation(axis))))
        game = axis
    elif direction == 's':
        axis = axisRotation(axisRotation(axisRotation(game)))
        axis = list(transpose(collapse(transpose(axis))))

        axis = axisRotation(game)
        game = axis
    elif direction == 'd':
        game = [collapse(line) for line in game]
    elif direction == 'a':
        game = [collapse(line[::-1])[::-1] for line in game]
    return game

def transpose(matrix):
    """
    Transpose matrix nxn.
    """
    size = len(game)
    return [[matrix[j][i] for j in range(size)] for i in range(size)]

def update_board(game):
    game_len = len(game[0])*len(game)
    if not any(x == 0 for row in game for x in row):
        return False, "Game Over"
    if any(x == 2048 for row in game for x in row):
        return False, "You Won"
    if game != slide(slide(game, "w"), "s"):
        return True, None
    if game != slide(slide(game, "d"), "a"):
        return True, None
    return False, None

def get_input():
    x = getch()
    if ord(x) == 27:
        x2 = getch()
        x3 = getch()
        return x+x2+x3
    return x

def getch():
    fd = sys.stdin.fileno()
    old_settings = termios.tcgetattr(fd)
    try:
        tty.setraw(sys.stdin.fileno())
        return sys.stdin.read(1)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)

def init_game():
    """Sets up the game"""
    os.system('clear')
    game = []
    size = 4

    for i in range(size):
        r = []
        for j in range(size):
            r.append(0)
        game.append(r)

    game[randint(0, size-1)][randint(0, size-1)] = 2

    return game

def game_loop():
    """Constantly receives input from user"""
    game = init_game()

    os.system('clear')
    display(game)

    while True:
        x = get_input()
        if x == "q":
            break
        elif x == "A":
            game = slide(game, 'w')
        elif x == "B":
            game = slide(game, 's')
        elif x == "D":
            game = slide(game, 'a')
        elif x == "C":
            game = slide(game, 'd')

        updated, info = update_board(game)
        os.system('clear')
        if info:
            print(info)
            break
        display(game)
        if updated:
            game[randint(0, len(game)-1)][randint(0, len(game[0])-1)] = 2

        updated, info = update_board(game)
        if info:
            print(info)
            break

def reset_terminal():
    termios.tcsetattr(IPT, termios.TCSANOW, old_settings)

if __name__ == '__main__':
    IPT = sys.stdin.fileno()
    old_settings = termios.tcgetattr(IPT)

    atexit.register(reset_terminal)

    game_loop()

在命令行中输入该代码即可开始游戏。

4. 总结

通过Python之freegames,我们可以很容易地制作出不同类型的小游戏,而且不需要编写任何代码。不仅适合初学者,还对有经验的Python用户来说也是一个有趣的挑战。

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

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 什么有那么多人选择Python,真的有那么好吗?

    为什么有那么多人选择Python,真的有那么好吗? Python是一门现代化的编程语言,因其简单易学、易用、开源、跨平台、功能强大和丰富的生态系统而备受欢迎。接下来,我们将详细讲解Python的优点。 1. 简单易学 Python语言的语法简单、清晰,排版规范,读起来像英语一样流畅自然,没有太多瑣碎的符号和花哨的编码机制,提供了极高的可读性和可维护性,是一门…

    python 2023年6月7日
    00
  • 如何在Python中进行异常处理

    如何在Python中进行异常处理 在Python中,异常处理是一种处理程序错误的机制。当程序出现错误时,Python解释器会引发异常。异常处理可以让我们在出现错误时,能够优雅地处理错误而不是让程序崩溃。 try-except语句 Python中的异常处理机制是通过try-except语句实现的。try-except语的基本语法如下: try: # 可能引发异…

    python 2023年5月13日
    00
  • 一个入门级python爬虫教程详解

    一个入门级Python爬虫教程详解 本教程旨在介绍基本的Python爬虫知识,帮助初学者了解如何使用Python爬取网页内容。在本教程中,我们使用BeautifulSoup、Requests等库来实现。 1. 安装必要的库 为了使用Python爬虫,需要安装以下库: pip install requests pip install beautifulsoup…

    python 2023年5月14日
    00
  • python_array[0][0]与array[0,0]的区别详解

    让我们先来看看两者的区别。 在Python中,可以使用多种方式来表示数组。其中,有一种方式是使用列表(List)创建多维数组,这种数组被称为Python List Array或Python内置数组(Python Built-in Array)。这种数组是Python标准库中“array”模块中提供的,其使用方式与列表类似。对于这种数组,我们可以使用下面两种方…

    python 2023年6月5日
    00
  • Python入门教程之变量与数据类型

    Python入门教程之变量与数据类型 本文将介绍在使用Python编程时常用的变量和数据类型,包括数字类型、字符串类型、布尔类型和列表类型。在实际应用中,了解和使用这些数据类型可以提高代码编写效率和质量。 变量 在Python中,变量是一个标识符,可以用来存储数据。变量的命名规则和其他编程语言类似,要求具有描述性和可读性。 另外,在Python中定义变量时不…

    python 2023年5月13日
    00
  • python中的3种定义类方法

    当我们定义一个类的时候,有很多种方式来定义类方法。在Python中,最常见的有三种: 实例方法 类方法 静态方法 1. 实例方法 实例方法是最常见的定义方式,它通常用于操作一个类的实例对象。实例方法的第一个参数必须是self,它表示对当前实例对象的引用。在实例方法内部,可以轻松地操作实例变量。 class MyClass: def __init__(self…

    python 2023年6月5日
    00
  • 利用Python实现岗位的分析报告

    利用Python实现岗位的分析报告是一个基于数据分析的任务,需要按照以下步骤进行: 1. 收集数据 收集数据是实现报告的第一步,需要从合适的渠道获取所需的数据。其中,常用的数据源包括: 爬虫:可以通过scrapy等爬虫框架获取数据源,如boss直聘等招聘网站的招聘信息等。 API:若所需数据源具有开放API接口,我们可以根据接口文档和调用方式,利用reque…

    python 2023年6月6日
    00
  • Python如何快速实现分布式任务

    首先,实现分布式任务需要以下几步: 编写任务代码,将任务封装为函数,并导出成可调用的模块。 配置分布式任务的运行环境,需要设置集群节点的主机名、端口号等信息。 编写启动脚本,控制任务的启动与停止,同时管理运行日志和错误输出。 分发任务代码到集群节点上,并启动节点上的任务。 以下是两个示例,展示如何通过Python快速实现分布式任务: 示例一:使用Celery…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部