pygame实现井字棋之第一步绘制九宫格

一、前言

这次,自己尝试使用pygame模块实现一个九宫格游戏。
目标:形成一个界面,将界面分割成9个,然后对于没有被占领的方框,我们可以用鼠标点击进行占领。
游戏规则就不用说了,至于套路,自己百度一下吧。
这里的人机采用随机数模式,因为实在是没什么套路。

二、显示界面

import pygame
import sys
# 初始化模块,加一下稳一些
pygame.init()
# 创建屏幕对象
screen = pygame.display.set_mode((width,height))
# 界面背景颜色渲染,放在while中会不断覆盖格子
screen.fill((255,255,255))
# 界面的标题
pygame.display.set_caption('井字棋')

# 刷新界面函数
def update():
    pass

# 游戏状态,0表示未分胜负,-1表示个人胜利,1表示电脑获胜
judge = 0

while not judge:
    update()
    # 感应事件
    for event in pygame.event.get():
    	# 点击关闭窗口,退出游戏
    	if event.type == pygame.QUIT:
            sys.exit()
    # 将渲染的界面显示
    pygame.display.flip()

另外,注意一下如果我们没有使用exit,那么游戏界面可能会卡死,然后显示未响应。

三、九宫格

这里我的想法是将界面分成9个格子,每一个格子对应一个rect对象。

# width、height已经给出
# 长/宽的三分之一,为一个格子的长宽
single = width/3
# 表示九个格子
rect = [0]*9
rect[0] = pygame.draw.rect(screen,(255,228,181),((0,0),(single,single)),width=1)
rect[1] = pygame.draw.rect(screen,(255,228,181),((single,0),(single,single)),width=1)
rect[2] = pygame.draw.rect(screen,(255,228,181),((single*2,0),(single,single)),width=1)
rect[3] = pygame.draw.rect(screen,(255,228,181),((0,single),(single,single)),width=1)
rect[4] = pygame.draw.rect(screen,(255,228,181),((single,single),(single,single)),width=1)
rect[5] = pygame.draw.rect(screen,(255,228,181),((single*2,single),(single,single)),width=1)
rect[6] = pygame.draw.rect(screen,(255,228,181),((0,single*2),(single,00)),width=1)
rect[7] = pygame.draw.rect(screen,(255,228,181),((single,single*2),(single,single)),width=1)
rect[8] = pygame.draw.rect(screen,(255,228,181),((single*2,800),(single,single)),width=1)

首先用[0]*9表示列表元素个数为9,然后修改内容……

rect函数的参数:

  • 背景界面,我们的screen
  • rbg颜色(这个颜色可能是矩形的填充颜色,也可能是边界颜色,看下面就知道了)
  • 矩形元组,第一个变量的矩形的左上角坐标,也是元组;第二个是宽度、长度
  • 边界宽度,如果非零则前面的颜色为边界颜色;如果为0,为填充颜色

你问我xy坐标什么鬼啊,就是这样

四、效果

我们的边界和背景颜色相当于写死,所以不需要每一次都进行渲染。

当格子被占用,我们需要显示一个X或者O,初步想法是在rect上渲染一个图像(如果懒得找就直接文字处理成矩形了),所以这样就涉及到了两个矩形的嵌套,我另外写了一个类。

# lattice.py
class Lattice():
    def __init__(self,rect):
        self.rect = rect
        # 0表示初始,1表示个人-1表示电脑
        self.stats = 0

	# 渲染矩阵
    def draw(self):
        # 按照状态显示
        if self.stats == -1:
            pass
        elif self.stats == 0:
            pass
        else:
            pass

按照格子的状态,生成内部矩形(还没写)。

主模块:

from lattice import Lattice

for i in range(len(rect)):
    rect[i] = Lattice(rect[i])

这样,原来的rect对象列表就变成了类的实例的列表。

未完待续

接下来,我将实现游戏的整体逻辑。

下一篇:pygame实现井字棋——2.逻辑实现

到此这篇关于pygame实现井字棋之第一步绘制九宫格的文章就介绍到这了,更多相关pygame绘制九宫格内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • pygame实现井字棋之第三步逻辑优化

    一.前言 先说一下本期的目标. 首先我们在判断出输赢.平局的时候,只有一个控制台输出,很明显不符合我们游戏的排面(doge 另外,之前的逻辑有一个漏洞,就是玩家一定是先手(就是第一个下棋的人,这个也需要修改). 还有,有一个短暂的弹窗显示到谁了,游戏的可玩性就会有提高. 最后一个就是,如果点击位置有问题,我们需要显示. 二.渲染问题 翻车了,之前的逻辑是将九宫格和背景颜色写死,而且之前都是直接在之前的基础上渲染,但是我们的弹窗需要在结束后及时撤下来,所以需要我们不断的重新渲染界面. 得,改吧.

  • pygame多种方式实现屏保操作(自动切换、鼠标切换、键盘切换)

    pygame多种方式实现屏保操作(自动切换.鼠标切换.键盘切换),欢迎往下观看. 一.图片处理 (一)图片采集 我认为有三种方法: 其一:使用爬虫技术从网上下载图片,可以开一个子线程负责采集网上图片,然后加载到list列表中: 其二:可以直接对电脑中所有的盘进行自动检索,然后加载到list列表中: 其三:指定目录,然后加载到list列表中: 我这里偷个懒,选择第三种方法实现.具体代码如下: path = './image/' files = [] dirs = os.listdir(path)

  • pygame实现井字棋之第二步逻辑实现

    一.前言 我们在上一篇博客中实现了九宫格的绘制,为我们打下了基础. 这次我们来实现基本的逻辑,比如判断输赢.玩家和电脑分别下棋的逻辑. 二.下棋 2.1 玩家 我们之前在Lattice类中,有一个stats变量来表示格子的状态, # 0表示初始,1表示个人-1表示电脑 self.stats = 0 所以下棋本质上就是修改这个变量. 首先,我们是用鼠标点击的方式来实现下棋的,所以应当修改事件响应部分: for event in pygame.event.get(): # 退出 if event.t

  • pygame可视化幸运大转盘实现

    继续分享pygame有趣的技术知识,欢迎往下看. 一.先搭个架子 (一)黏贴背景图: 实现代码如下: import pygame pygame.init() # 初始化pygame类 screen = pygame.display.set_mode((600, 600)) # 设置窗口大小 pygame.display.set_caption('幸运大转盘') # 设置窗口标题 tick = pygame.time.Clock() fps = 10 # 设置刷新率,数字越大刷新率越高 # 方法一

  • Python3+Pygame实现射击游戏完整代码

    之前看到过很多人写的飞机大战,当然了之前我也写过多个版本,总体来说功能是实现了,但总感觉不够"炫" 今天浏览Python资料的时候,意外发现了这个很好的"射击"类游戏,看上去类似飞机大战,但更好玩 一.游戏特点 1. 运行非常流畅 2. 默认有3条命,每条命的HP可以增加(吃补品)也可以减少(被击中) 3. 有碰撞时的音效 4. 有碰撞时的爆炸效果 二.运行效果展示 三.完整代码 from __future__ import division import pyga

  • python+pygame实现代码雨(黑客帝国既视感)

    本文主要介绍了python+pygame实现代码雨,分享给大家,具体如下: 效果: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2020/12/29 12:34 # @Author : huni # @File : 代码雨.py # @Software: PyCharm import random import pygame PANEL_width = 1600 PANEL_highly = 1000 FONT_PX = 15

  • 详解pygame捕获键盘事件的两种方式

    方式1:在pygame中使用pygame.event.get()方法捕获键盘事件,使用这个方式捕获的键盘事件必须要是按下再弹起才算一次. 示例示例: for event in pygame.event.get(): # 捕获键盘事件 if event.type == pygame.QUIT: # 判断按键类型 print("按下了退出按键") 方式2:在pygame中可以使用pygame.key.get_pressed()来返回所有按键元组,通过判断键盘常量,可以在元组中判断出那个键被

  • Pygame做一期吃豆子游戏的示例代码

    Pygame的历史 Pygame是一个利用SDL库的写就的游戏库,SDL呢,全名Simple DirectMedia Layer,是一位叫做Sam Lantinga的大牛写的,据说他为了让Loki(致力于向Linux上移植Windows的游戏的一家大好人公司,可惜已经倒闭,唉好人不长命啊--)更有效的工作,创造了这个东东. SDL是用C写的,不过它也可以使用C++进行开发,当然还有很多其它的语言,Pygame就是Python中使用它的一个库.Pygame已经存在很多时间了,许多优秀的程序员加入其

  • pygame实现井字棋之第一步绘制九宫格

    一.前言 这次,自己尝试使用pygame模块实现一个九宫格游戏. 目标:形成一个界面,将界面分割成9个,然后对于没有被占领的方框,我们可以用鼠标点击进行占领. 游戏规则就不用说了,至于套路,自己百度一下吧. 这里的人机采用随机数模式,因为实在是没什么套路. 二.显示界面 import pygame import sys # 初始化模块,加一下稳一些 pygame.init() # 创建屏幕对象 screen = pygame.display.set_mode((width,height)) #

  • Java实现简单井字棋小游戏代码实例

    Java第一次实验,老师让做一个井字棋,电脑随机下棋. 然后就想能不能聪明一点,可以判断出走哪一步棋:然后只能做到不会输,还是不够聪明,只能呆板地堵住用户,smartRobot的第三个判断逻辑找不到最佳位置,赢得概率比较小:而且我没事干时,想玩玩这个小游戏找找成就感,但每次都会赢了机器人,所以删删改改了四五次,最后才成. 可以选择谁先开始,但startGame里的代码更加冗余了.看着就很乱,但没想到好的办法. smartRobot里的代码全部重写了,比原来更聪明一点了:下在四个角的位置时,能优先

  • 利用C语言实现三子棋(井字棋)小游戏

    本文实例为大家分享了C语言实现三子棋(井字棋)小游戏的具体代码,供大家参考,具体内容如下 推荐阅读顺序(不建议跳过) 先看实现之后的界面 -- 然后看分析程序要实现的步骤 -- 之后在看翻到test.c部分 -- 在test.c中找到main()函数 -- 从main函数的第一步开始看 -- 遇到自定义函数请到game.h源文件中找到相应函数的详情 辅助阅读: game.h文件中放的是函数的声明(引用头文件) game.c文件中放的是函数的详情(怎么用代码实现相应步骤的) test.c文件中放的

  • python入门游戏之井字棋实例代码

    目录 井字棋简介 实例代码 总结 井字棋简介 井字棋又称三子棋,英文名为Tic Tac Toe.具体玩法为在一个3x3的棋盘上,一个玩家用X做棋子,另一个玩家用O做棋子,谁先在棋盘上的一行.一列或对角线上画满三个棋子,即可获胜,如果棋盘下满无人胜出,即为平局. 实例代码 #要用的函数,可以在主程序用到时再看 def panduan1(a,b):#判断是否获胜,返回1则证明此颜色的棋获胜 x=0 if x==0: for i in range(3):#检索二维数组的第i行 q=0;p=0 for

  • 利用C语言实现三子棋(井字棋)小游戏

    本文实例为大家分享了C语言实现三子棋(井字棋)小游戏的具体代码,供大家参考,具体内容如下 推荐阅读顺序(不建议跳过) 先看实现之后的界面 -- 然后看分析程序要实现的步骤 -- 之后在看翻到test.c部分 -- 在test.c中找到main()函数 -- 从main函数的第一步开始看 -- 遇到自定义函数请到game.h源文件中找到相应函数的详情 辅助阅读: game.h文件中放的是函数的声明(引用头文件) game.c文件中放的是函数的详情(怎么用代码实现相应步骤的) test.c文件中放的

  • python实现人机对战的井字棋游戏

    本文实例为大家分享了python实现人机对战井字棋的具体代码,供大家参考,具体内容如下 游戏简介:在九宫格内进行,如果一方抢先于另一方向(横.竖.斜)连成3子,则获得胜利.游戏中输入方格位置代号的形式如下: 设计前的思路: 游戏中,board棋盘存储玩家.计算机的落子信息,未落子处未EMPTY.由于人机对战,需要实现计算机智能性,下面是为这个计算机机器人设计的简单策略:如果有一步棋可以让计算机机器人在本轮获胜,那就选那一步走.否则,如果有一步棋可以让玩家在本轮获胜,那就选那一步走.否则,计算机机

  • python实现井字棋游戏

    本文实例介绍了python实现井字棋游戏的方法,分享给大家,具体内容如下 windows7下python3.4.0编译运行通过.由于采用了cmd调用,所以与Linux不兼容,无法在Linux下运行. 游戏就是井字棋,小键盘上的数字位置对应棋盘位置. #本游戏python3.4.0下编写调试,只能在windows下运行. import random import subprocess import time #定义函数 def draw_board(the_board): subprocess.c

  • python实现简单井字棋小游戏

    用python实现的一个井字棋游戏,供大家参考,具体内容如下 #Tic-Tac-Toe 井字棋游戏 #全局常量 X="X" O="O" EMPTY=" " #询问是否继续 def ask_yes_no(question): response=None; while response not in("y","n"): response=input(question).lower() return respon

随机推荐