井字棋小游戏大全,c语言写井字棋小游戏

  井字棋小游戏大全,c语言写井字棋小游戏

  本文主要详细介绍python的简单井字游戏。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

  玩Python跳棋,这是我刚开始知道怎么玩Python游戏的时候的第一个项目,因为简单好上手,实现的过程就是我开始探索Python的GUI界面的方式。这个设计也是根据我自己对游戏的理解一步步实现的。

  

窗口

  通用窗口,实现窗口可以简单地修改使用:

  来自tkinter import *

  Root=Tk() #窗口名称

  Root.title(《韩寒下的三盘棋》)

  f1=框架(根)

  f1.pack()

  W1=canvas (f1,width=580,height=580,background= light cyan) #创建一个画布,设置其大小和背景色。

  w1.pack()

  root.mainloop()

  画一个棋盘

  #画一个棋盘

  对于(0,4):范围内的I

  w1.create_line(i * 180 20,20,i * 180 20,560)

  w1.create_line(20,i * 180 20,560,i * 180 20)

  分别画横线和竖线,四条横线和四条竖线,生成九个网格。还可以画两条横线两条竖线,更接近井字形状。只需画几条线,例如:

  对于(1,3):范围内的I

  w1.create_line(i * 180 20,20,i * 180 20,560)

  w1.create_line(20,i * 180 20,560,i * 180 20)

  Num=0 #记录点击次数,用来决定点击后要画哪些图形。

  A=np.full((3,3),0) #记录每个位置的图形

  

算法

  每次点击后,我们都要画图,判断是否满足中奖条件。

  集合函数

  定义黎明(事件):

  全局w1

  全局编号,A

  对于(0,3):范围内的I

  对于范围(0,3):中的j

  如果20 j * 180 event.y和event.y=20 (j 1) * 180:

  破裂

  如果20 i * 180=event.x且event.x=20 (i 1) * 180:

  破裂

  如果num % 2==0并且A[i][j]==0:

  A[i][j]=1

  w1 . create _ line(110 180 * I-45 * math . sqrt(2),110 180 * j - 45 * math.sqrt(2),

  110 180 * i 45 * math.sqrt(2),110 180 * j 45 * math.sqrt(2))

  w1 . create _ line(110 180 * I 45 * math . sqrt(2),110 180 * j - 45 * math.sqrt(2),

  110 180 * i - 45 * math.sqrt(2),110 180 * j 45 * math.sqrt(2))

  数量=1

  如果数量% 2!=0和A[i][j]==0:

  A[i][j]=2

  w1.create_oval(20 180 * i,20 180 * j,20 180 * (i 1),20 180 * (j 1))

  数量=1

  如果A[0][0]==A[0][1]==A[0][2]==2或A[1][0]==A[1][1]==A[1][2]==2或A[2][0]==A[2][1]==A[

  2][

          2] == 2 or \

              A[0][0] == A[1][0] == A[2][0] == 2 or A[0][1] == A[1][1] == A[2][1] == 2 or A[0][2] == A[1][2] == \

              A[2][

                  2] == 2 or \

              A[0][0] == A[1][1] == A[2][2] == 2 or A[2][0] == A[1][1] == A[0][2] == 2:

          tkinter.messagebox.showinfo(消息提示, 圆圈获胜)

      elif A[0][0] == A[0][1] == A[0][2] == 1 or A[1][0] == A[1][1] == A[1][2] == 1 or A[2][0] == A[2][1] == A[2][

          2] == 1 or \

              A[0][0] == A[1][0] == A[2][0] == 1 or A[0][1] == A[1][1] == A[2][1] == 1 or A[0][2] == A[1][2] == \

              A[2][

                  2] == 1 or \

              A[0][0] == A[1][1] == A[2][2] == 1 or A[2][0] == A[1][1] == A[0][2] == 1:

          tkinter.messagebox.showinfo(消息提示, 叉号获胜)

  w1.bind("<Button -1>", dawn)

  我们拆开进行分析:

  首先是:点击位置的确定,得到我们的点击单元格,开始时我是用的是判断是否在方格的内切圆范围内,发现点击到方格的剩余部分会导致化的图形错位,通过进一步的分析发现,可以通过分别定位点击位置的横纵坐标,确定点击的方格。

  

for i in range(0, 3):

          for j in range(0, 3):

              if 20 + j * 180 < event.y and event.y <= 20 + (j+1) * 180:

                  break

          if 20 + i * 180 <= event.x and event.x <= 20 + (i+1) * 180:

              break

  接着,确定了位置以后我们就开始判断当前位置是否能画图形,应该画什么图形,画❌是比较麻烦的需要进行复杂的计算,画⚪就比较简单。

  

if num % 2 == 0 and A[i][j] == 0:            #若为偶数就画叉号

          A[i][j] = 1

          w1.create_line(110 + 180 * i - 45 * math.sqrt(2), 110 + 180 * j - 45 * math.sqrt(2),

                         110 + 180 * i + 45 * math.sqrt(2), 110 + 180 * j + 45 * math.sqrt(2))

          w1.create_line(110 + 180 * i + 45 * math.sqrt(2), 110 + 180 * j - 45 * math.sqrt(2),

                         110 + 180 * i - 45 * math.sqrt(2), 110 + 180 * j + 45 * math.sqrt(2))

          num += 1

      if num % 2 != 0 and A[i][j] == 0:        #若为奇数就画圆圈

          A[i][j] = 2

          w1.create_oval(20 + 180 * i, 20 + 180 * j, 20 + 180 * (i + 1), 20 + 180 * (j + 1))

          num += 1

  画完以后我们要判断是否达到获胜的条件,这里我没想到简便的方法,但是好在获胜的情况屈指可数,只有八种(横3,竖3,两个斜方向的)于是将八种情况列出进行判断是否达到获胜条件,而且两种图形都需要列出。

  

if A[0][0] == A[0][1] == A[0][2] == 2 or A[1][0] == A[1][1] == A[1][2] == 2 or A[2][0] == A[2][1] == A[2][

          2] == 2 or \

              A[0][0] == A[1][0] == A[2][0] == 2 or A[0][1] == A[1][1] == A[2][1] == 2 or A[0][2] == A[1][2] == \

              A[2][

                  2] == 2 or \

              A[0][0] == A[1][1] == A[2][2] == 2 or A[2][0] == A[1][1] == A[0][2] == 2:

          tkinter.messagebox.showinfo(消息提示, 圆圈获胜)

      elif A[0][0] == A[0][1] == A[0][2] == 1 or A[1][0] == A[1][1] == A[1][2] == 1 or A[2][0] == A[2][1] == A[2][

          2] == 1 or \

              A[0][0] == A[1][0] == A[2][0] == 1 or A[0][1] == A[1][1] == A[2][1] == 1 or A[0][2] == A[1][2] == \

              A[2][

                  2] == 1 or \

              A[0][0] == A[1][1] == A[2][2] == 1 or A[2][0] == A[1][1] == A[0][2] == 1:

          tkinter.messagebox.showinfo(消息提示, 叉号获胜)

  最后设置点击时间的获取以及退出按钮的设置。

  

w1.bind("<Button -1>", dawn)

  def quit():

      root.quit()

  button1 = Button(root, text="退出", font=(楷体, 20), command=quit)

  button1.pack()

  到这里游戏的每个代码都讲解完了。

  

  附完整代码:

  

from tkinter import *

  import numpy as np

  import math

  import tkinter.messagebox

  root = Tk()         #窗口名称

  root.title("憨憨制作的三子棋")

  f1=Frame(root)

  f1.pack()

  w1 = Canvas(f1, width=580,height=580,background=lightcyan)

  w1.pack()

  #棋盘

  for i in range(0, 4):

      w1.create_line(i * 180 + 20, 20, i * 180 + 20, 560)

      w1.create_line(20, i * 180 + 20, 560, i * 180 + 20)

  num = 0

  A = np.full((3, 3), 0)

  def dawn(event):

      global w1

      global num, A

      for i in range(0, 3):

          for j in range(0, 3):

              if 20 + j * 180 < event.y and event.y <= 20 + (j+1) * 180:

                  break

          if 20 + i * 180 <= event.x and event.x <= 20 + (i+1) * 180:

              break

      if num % 2 == 0 and A[i][j] == 0:

          A[i][j] = 1

          w1.create_line(110 + 180 * i - 45 * math.sqrt(2), 110 + 180 * j - 45 * math.sqrt(2),

                         110 + 180 * i + 45 * math.sqrt(2), 110 + 180 * j + 45 * math.sqrt(2))

          w1.create_line(110 + 180 * i + 45 * math.sqrt(2), 110 + 180 * j - 45 * math.sqrt(2),

                         110 + 180 * i - 45 * math.sqrt(2), 110 + 180 * j + 45 * math.sqrt(2))

          num += 1

      if num % 2 != 0 and A[i][j] == 0:

          A[i][j] = 2

          w1.create_oval(20 + 180 * i, 20 + 180 * j, 20 + 180 * (i + 1), 20 + 180 * (j + 1))

          num += 1

      if A[0][0] == A[0][1] == A[0][2] == 2 or A[1][0] == A[1][1] == A[1][2] == 2 or A[2][0] == A[2][1] == A[2][

          2] == 2 or \

              A[0][0] == A[1][0] == A[2][0] == 2 or A[0][1] == A[1][1] == A[2][1] == 2 or A[0][2] == A[1][2] == \

              A[2][

                  2] == 2 or \

              A[0][0] == A[1][1] == A[2][2] == 2 or A[2][0] == A[1][1] == A[0][2] == 2:

          tkinter.messagebox.showinfo(消息提示, 圆圈获胜)

      elif A[0][0] == A[0][1] == A[0][2] == 1 or A[1][0] == A[1][1] == A[1][2] == 1 or A[2][0] == A[2][1] == A[2][

          2] == 1 or \

              A[0][0] == A[1][0] == A[2][0] == 1 or A[0][1] == A[1][1] == A[2][1] == 1 or A[0][2] == A[1][2] == \

              A[2][

                  2] == 1 or \

              A[0][0] == A[1][1] == A[2][2] == 1 or A[2][0] == A[1][1] == A[0][2] == 1:

          tkinter.messagebox.showinfo(消息提示, 叉号获胜)

  w1.bind("<Button -1>", dawn)

  def quit():

      root.quit()

  button1 = Button(root, text="退出", font=(楷体, 20), command=quit)

  button1.pack()

  root.mainloop()

  游戏实现只是个人的思路和操作,可能会有很多的不足,有愿意一起研究的朋友可以联系我,愿意虚心请教。

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: