python趣味编程-奥赛罗游戏

news2024/9/27 7:25:18

在上一期我们用Python实现了一个高速公路汽车游戏的游戏,这一期我们继续使用Python实现一个简单的奥赛罗游戏,让我们开始今天的旅程吧~

在Python中使用Turtle实现的奥赛罗游戏

在Python中使用Turtle的简单奥赛罗游戏 是一个以 Python 为程序设计语言的项目。该项目包含一个使此应用程序可播放的多个函数。这个项目可以使那些想要从头开始开发自己的python游戏的人受益。这可以成为您开始学习游戏开发的垫脚石,为您的未来职业生涯做准备。简单的奥赛罗游戏 是一个简单的项目,目标是改变你的对手颜色朝上。这 在Python中使用Turtle的简单奥赛罗游戏 可以帮助您学习游戏编程的基础知识 Python 编程。

基本信息

  • 使用的语言: Python
  • 使用的编码工具: 内置 Python IDLE
  • 类型: 桌面应用程序
  • 使用的数据库: 没有

关于《简单奥赛罗游戏》

简单的奥赛罗游戏 是使用 Python 程序设计语言。此应用程序是一种用户友好的系统,可以轻松满足您的需求。该应用程序为您提供了一个高级功能,将显示游戏的实际游戏玩法。玩家可以使用鼠标玩游戏,您只需要使用鼠标左键即可与游戏进行交互。游戏在 8x8 无方格板上进行。每个圆盘两侧对应于玩家棋子(浅色和深色)。游戏将从已经放在棋盘中的 4 件棋子开始。每个玩家在回合结束后轮流,玩家使用黑暗的棋子移动。游戏玩法非常简单,第一个在棋盘上有很多颜色位置的玩家将赢得游戏。

在Python中使用Turtle的简单奥赛罗游戏免费源代码 特征

  • 基本图形用户界面
    • 该项目包含显示应用程序实际图像的基本 GUI。
  • 基本功能
    • 该项目包含使应用程序按预期工作的基本功能。
  • 用户友好的界面
    • 该项目是在一个简单的用户友好的界面Web应用程序中设计的,以便您轻松修改。

示例应用程序屏幕截图:

在Python中使用Turtle的简单奥赛罗游戏免费源代码安装指南

  1. 首先,您需要下载并安装Python IDLE,这里是链接“https://www.python.org/downloads/”。
  2. 下载此站点中的源代码。
  3. 找到并解压缩 zip 文件。
  4. 打开解压缩的文件夹
  5. 找到 .py 文件。
  6. 然后通过python IDLE或任何支持python语言的IDE打开文件。
  7. 运行 .py 文件以启动程序。

仅此而已, 简单的奥赛罗游戏 是使用 Python 语言。我希望这个项目可以帮助您找到所需的内容。欲了解更多信息 项目和教程 请访问本网站。享受编码吧!

核心源码

import score, turtle, random
from board import Board


MOVE_DIRS = [(-1, -1), (-1, 0), (-1, +1),
             (0, -1),           (0, +1),
             (+1, -1), (+1, 0), (+1, +1)]

class Othello(Board):
   

    def __init__(self, n = 8):
        turtle.title("OTHELLO")
        Board.__init__(self, n)
        self.current_player = 0
        self.num_tiles = [2, 2]

    def initialize_board(self):
        
        if self.n < 2:
            return

        coord1 = int(self.n / 2 - 1)
        coord2 = int(self.n / 2)
        initial_squares = [(coord1, coord2), (coord1, coord1),
                           (coord2, coord1), (coord2, coord2)]
        
        for i in range(len(initial_squares)):
            color = i % 2
            row = initial_squares[i][0]
            col = initial_squares[i][1]
            self.board[row][col] = color + 1
            self.draw_tile(initial_squares[i], color)
    
    def make_move(self):
       
        if self.is_legal_move(self.move):
            self.board[self.move[0]][self.move[1]] = self.current_player + 1
            self.num_tiles[self.current_player] += 1
            self.draw_tile(self.move, self.current_player)
            self.flip_tiles()
    
    def flip_tiles(self):
        
        curr_tile = self.current_player + 1 
        for direction in MOVE_DIRS:
            if self.has_tile_to_flip(self.move, direction):
                i = 1
                while True:
                    row = self.move[0] + direction[0] * i
                    col = self.move[1] + direction[1] * i
                    if self.board[row][col] == curr_tile:
                        break
                    else:
                        self.board[row][col] = curr_tile
                        self.num_tiles[self.current_player] += 1
                        self.num_tiles[(self.current_player + 1) % 2] -= 1
                        self.draw_tile((row, col), self.current_player)
                        i += 1

    def has_tile_to_flip(self, move, direction):
       
        i = 1
        if self.current_player in (0, 1) and \
           self.is_valid_coord(move[0], move[1]):
            curr_tile = self.current_player + 1
            while True:
                row = move[0] + direction[0] * i
                col = move[1] + direction[1] * i
                if not self.is_valid_coord(row, col) or \
                    self.board[row][col] == 0:
                    return False
                elif self.board[row][col] == curr_tile:
                    break
                else:
                    i += 1
        return i > 1

    def has_legal_move(self):
        
        for row in range(self.n):
            for col in range(self.n):
                move = (row, col)
                if self.is_legal_move(move):
                    return True
        return False
    
    def get_legal_moves(self):
        
        moves = []
        for row in range(self.n):
            for col in range(self.n):
                move = (row, col)
                if self.is_legal_move(move):
                    moves.append(move)
        return moves

    def is_legal_move(self, move):
       
        if move != () and self.is_valid_coord(move[0], move[1]) \
           and self.board[move[0]][move[1]] == 0:
            for direction in MOVE_DIRS:
                if self.has_tile_to_flip(move, direction):
                    return True
        return False

    def is_valid_coord(self, row, col):
       
        if 0 <= row < self.n and 0 <= col < self.n:
            return True
        return False

    def run(self):
        
        if self.current_player not in (0, 1):
            print('Error: unknown player. Quit...')
            return
        
        self.current_player = 0
        print('Your turn.')
        turtle.onscreenclick(self.play)
        turtle.mainloop()

    def play(self, x, y):
        
        if self.has_legal_move():
            self.get_coord(x, y)
            if self.is_legal_move(self.move):
                turtle.onscreenclick(None)
                self.make_move()
            else:
                return

       
        while True:
            self.current_player = 1
            if self.has_legal_move():
                print('Computer\'s turn.')
                self.make_random_move()
                self.current_player = 0
                if self.has_legal_move():  
                    break
            else:
                break
        
        
        self.current_player = 0

        
        if not self.has_legal_move() or sum(self.num_tiles) == self.n ** 2:
            turtle.onscreenclick(None)
            print('-----------')
            self.report_result()
            name = input('Enter your name for posterity\n')
            if not score.update_scores(name, self.num_tiles[0]):
                print('Your score has not been saved.')
            print('Thanks for playing Othello!')
            close = input('Close the game screen? Y/N\n')
            if close == 'Y':
                turtle.bye()
            elif close != 'N':
                print('Quit in 3s...')
                turtle.ontimer(turtle.bye, 3000)
        else:
            print('Your turn.')
            turtle.onscreenclick(self.play)
        
    def make_random_move(self):
       
        moves = self.get_legal_moves()
        if moves:
            self.move = random.choice(moves)
            self.make_move()

    def report_result(self):
       
        print('GAME OVER!!')
        if self.num_tiles[0] > self.num_tiles[1]:
            print('YOU WIN!!',
                  'You have %d tiles, but the computer only has %d!' 
                  % (self.num_tiles[0], self.num_tiles[1]))
        elif self.num_tiles[0] < self.num_tiles[1]:
            print('YOU LOSE...',
                  'The computer has %d tiles, but you only have %d :(' 
                  % (self.num_tiles[1], self.num_tiles[0]))
        else:
            print("IT'S A TIE!! There are %d of each!" % self.num_tiles[0])
    
    def __str__(self):
     
        player_str = 'Current player: ' + str(self.current_player + 1) + '\n'
        num_tiles_str = '# of black tiles -- 1: ' + str(self.num_tiles[0]) + \
                        '\n' + '# of white tiles -- 2: ' + \
                        str(self.num_tiles[1]) + '\n'
        board_str = Board.__str__(self)
        printable_str = player_str + num_tiles_str + board_str

        return printable_str

    def __eq__(self, other):
       
        return Board.__eq__(self, other) and self.current_player == \
        other.current_player

这 在Python中使用Turtle的简单奥赛罗游戏免费源代码 已准备好下载,只需单击下面的下载按钮。

下载

奥赛罗游戏

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

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

相关文章

基于nvidia xavier智能车辆自动驾驶域控制器设计与实现(一)

智能车辆在减少交通事故、节能减排、缓解交通拥堵等方面具有十分重要的作用&#xff0c;自动驾驶系统又是智能车辆的核心。近年来&#xff0c;随着智能车辆的应用场景日益广泛&#xff0c;人工智能算法在自动驾驶系统中广泛应用&#xff0c;自动驾驶系统功能不断增强&#xff0…

ccc-pytorch-RNN(7)

文章目录一、RNN简介二、RNN关键结构三、RNN的训练方式四、时间序列预测五、梯度弥散和梯度爆炸问题一、RNN简介 RNN&#xff08;Recurrent Neural Network&#xff09;中文循环神经网络&#xff0c;用于处理序列数据。它与传统人工神经网络和卷积神经网络的输入和输出相互独立…

Revit导出CAD图纸操作及批量导出

一、Revit如何导出CAD格式图纸 1.打开Revit模型。 2.项目浏览器&#xff0c;图纸(全部)&#xff0c;鼠标右键点击&#xff0c;新建图纸。 3.选择自己需要的图纸大小&#xff0c;点击“确定”&#xff0c;即可创建一张图纸。 4.找到想要导出的图纸标高或者立面&#xff0c;例如&…

idea leetcode插件无法登录

em 2022某天 leetcode-cn.com 改为了 leetcode.cn so , 如果是版本比较老idea leetcode插件, 就无法使用了. 因为用的旧域名 先说解决办法: 2.0 先把旧版本卸载了 2.1 ideaplugin官网找到本地idea版本下可安装的最高版本的leetcode.cn 假设是 leetcode-editor-6.9.zip 2.2 下…

2023年3.8女神节买台灯怎么挑选?台灯用什么样的比较好

最近女神节&#xff0c;祝广大女性朋友们节日快乐啊。娱乐之余&#xff0c;一些实用的东西也是非常适合作为礼物送给女性朋友哦&#xff0c;台灯就是其中一个不错的选择。 台灯作为一种智能家居产品&#xff0c;不仅可见点缀卧室房间装饰&#xff0c;晚上的时候开启小范围照明&…

uniapp+uniCloud实战项目报修小程序开发

前言 本项目基于 uniapp uniCloud 云开发&#xff0c;简单易用&#xff0c;逻辑主要是云数据库的增删查改&#xff0c;页面大部分自写&#xff0c;部分使用uniUI, uView 组件库。大家可用于学习或者二次开发&#xff0c;有什么不懂的地方可联系 wechat&#xff1a;MrYe443。用…

2023-03-09 MySQL源码分析-MySQL中的直方图

摘要: 直方图的在查询优化中的作用主要是为了优化器中的代价模型提供代价中的统计信息计算, 本文对其进行分析 Histogram In MySQL mysql hitograms目录中为mysql所提供的直方图的相关基础设施代码。在mysql 8.0之前其没有使用直方图作为统计信息来为查询优化提供支持。 早期的…

请教大神们,pmp考试和复习有什么攻略诀窍吗?

PMP考试通过率挺高的&#xff0c;很多考生也是朝九晚五甚至天天加班的打工人&#xff0c;还是有很多人通过了的&#xff0c;我也是下班后和周末才有时间学习的&#xff0c;3A通过&#xff0c;但不是什么考试大神&#xff0c;每天抽出3-4个小时跟着培训机构制定的学习计划学习&a…

Linux高并发服务器之Linux多线程开发

Linux高并发服务器之Linux多线程开发一、线程概述二、线程操作相关函数1、创建线程2、线程终止3、线程连接4、线程分离5、线程取消6、线程属性三、线程同步1、多线程卖票案例2、互斥锁解决卖票问题3、读写锁优化卖票问题4、生产者消费者模型5、条件变量解决生产者消费者问题6、…

[ 云计算 | Azure ] Episode 03 | 描述云计算运营中的 CapEx 与 OpEx,如何区分 CapEx 与 OpEx

正常情况如果你不是会计&#xff0c;或者对钱相关的数字比较敏感的财务&#xff0c;本文的一些东西你不会接触的&#xff0c;但是最为云架构或者云运营&#xff0c;你可能会遇到如何采购亦或者估算的我成本和运营成本等等&#xff0c;所以本文的一些知识点就需要进行一定的了解…

哪款蓝牙耳机音质好?内行推荐四款高音质蓝牙耳机

蓝牙耳机经过近几年的快速发展&#xff0c;在音质上的表现也越来越好。哪款蓝牙耳机音质好&#xff1f;最近看到很多人问。接下来&#xff0c;我来给大家推荐四款高音质蓝牙耳机&#xff0c;可以当个参考。 一、南卡小音舱蓝牙耳机 参考价&#xff1a;246 发声单元&#xff…

900万英镑!光量子计算公司PsiQuantum获得英国政府支持

PsiQuantum的模块化量子计算系统使用传统光纤将单个低温单元联网。&#xff08;图片来源&#xff1a;网络&#xff09;3月6日&#xff0c;PsiQuantum宣布&#xff0c;在英格兰西北部STFC的Daresbury实验室&#xff0c;开设先进研发设施。这项工作得到了英国政府科学创新和技术部…

HTTP加密/HTTPS工作过程

31.HTTPS即HTTP加密 前言 工作过程清楚明白&#xff01;&#xff01;&#xff01; 本质上是在讲SSL&#xff0c;适用面很广。不用再深挖了&#xff0c;密码学不用了解太多 SSL和TSL&#xff0c;本质上是一类东西 之后可以看看123 文章目录31.HTTPS即HTTP加密前言一、什么是HTT…

C++基础——C++面向对象之数据封装、数据抽象与接口基础总结

【系列专栏】&#xff1a;博主结合工作实践输出的&#xff0c;解决实际问题的专栏&#xff0c;朋友们看过来&#xff01; 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实…

打怪升级之字符串的分界符与字符串替换

流的字符串分界符 在C的iostream中&#xff0c;有流的字符串分界符&#xff1a; " “和”"都代表简单的分隔。 因此&#xff0c;使用流来做字符串分隔的话&#xff0c;有一个比较简单的方案就是将原定义的分隔符通过替换的方式变成流的分隔符。然后再录入流中就能…

【论文简述】Learning Optical Flow with Kernel Patch Attention(CVPR 2022)

一、论文简述 1. 第一作者&#xff1a;Ao Luo 2. 发表年份&#xff1a;2022 3. 发表期刊&#xff1a;CVPR 4. 关键词&#xff1a;光流、局部注意力、空间关联、上下文关联 5. 探索动机&#xff1a;现有方法主要将光流估计视为特征匹配任务&#xff0c;即学习在特征空间中将…

软件设计师教程(十)计算机系统知识-结构化开发

软件设计师教程 软件设计师教程&#xff08;一&#xff09;计算机系统知识-计算机系统基础知识 软件设计师教程&#xff08;二&#xff09;计算机系统知识-计算机体系结构 软件设计师教程&#xff08;三&#xff09;计算机系统知识-计算机体系结构 软件设计师教程&#xff08;…

Zookeeper3.5.7版本——客户端命令行操作(节点删除与查看)

目录一、节点删除示例1.1、节点删除1.2、递归节点删除二、查看节点状态示例一、节点删除示例 1.1、节点删除 在客户端上创建 test 节点&#xff0c;并查看该节点 [zk: localhost:2181(CONNECTED) 5] create /test "123456"删除 test 节点&#xff0c;并查看该节点 […

初识rollup 打包、配置vue脚手架

rollup javascript 代码打包器&#xff0c;它使用了 es6 新标准代码模块格式。 特点&#xff1a; 面向未来&#xff0c;拥抱 es 新标准&#xff0c;支持标准化模块导入、导出等新语法。tree shaking 静态分析导入的代码。排除未实际引用的内容兼容现有的 commonJS 模块&#…

Sqoop详解

目录 一、sqoop基本原理 1.1、何为Sqoop&#xff1f; 1.2、为什么需要用Sqoop&#xff1f; 1.3、关系图 1.4、架构图 二、Sqoop可用命令 2.1、公用参数&#xff1a;数据库连接 2.2、公用参数&#xff1a;import 2.3、公用参数&#xff1a;export 2.4、公用参数&#xff…