鱼C论坛

 找回密码
 立即注册
查看: 3262|回复: 76

[作品展示] 用Python做的魔方游戏【超简陋版】

[复制链接]
发表于 2023-7-1 15:56:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Ewan-Ahiouy 于 2023-7-4 12:46 编辑

用Python做的魔方游戏【超简陋版】


游戏背景

最近学习了Pygame,想做一个游戏练练手,就做了......

正好喜欢魔方,就做了一个魔方游戏

但是没有学过3D,就勉强做了个2D版的

虽说好做了些,但还是花费了楼主几天时间

所以......

评点分不过分吧

求求了!

因为蒟蒻不会输入框,所以用按键表示魔方的各个操作,完整如下表

按键rufdlbme
表示的操作RUFDLBMe


按键tigckv
表示的操作rufdlb


按键xyzs
表示的操作xyzs


如果你需要用这些操作的反操作( 就是比如 R' 这样的操作 ),则需要按下 n 后按下需要的按键即可( 如进行 R' 操作,需要按下 n ,在按下 r ,这样打出的就是 R' 的操作了

n 键其实就是正操作与反操作的转换键

有些人可能看不懂这些 $%^&%{.;..}#%$%^ 字母是什么,可以看看下图


                               
登录/注册后可看大图



                               
登录/注册后可看大图



                               
登录/注册后可看大图



                               
登录/注册后可看大图


游戏截图

( 图床大法真好! 感谢发明者~ )


                               
登录/注册后可看大图



                               
登录/注册后可看大图



                               
登录/注册后可看大图


附加文件

imgs.rar (326.73 KB, 下载次数: 5, 售价: 1 鱼币)

就是个图标而已

Code

  1. import pygame
  2. import sys

  3. pygame.init()

  4. class moFang:
  5.     """ 1: Yellow, 2: White, 3: Red, 4: Orange, 5: Blue, 6: Green """

  6.     def __init__(self, shang: str, xia: str, qian: str, hou: str, zuo: str, you: str):
  7.         self.shang = [list(map(int, i.split(" "))) for i in shang.split("\n")]
  8.         self.xia = [list(map(int, i.split(" "))) for i in xia.split("\n")]
  9.         self.qian = [list(map(int, i.split(" "))) for i in qian.split("\n")]
  10.         self.hou = [list(map(int, i.split(" "))) for i in hou.split("\n")]
  11.         self.you = [list(map(int, i.split(" "))) for i in you.split("\n")]
  12.         self.zuo = [list(map(int, i.split(" "))) for i in zuo.split("\n")]
  13.         self.caoZuoList = [self.R, self.U, self.F, self.L, self.D, self.B, self.M, self.E, self.x, self.y, self.z, self.u, self.r, self.f, self.l, self.d, self.b, self.s]
  14.         self.zhiLing = ["R", "R'", "R2", "U", "U'", "U2", "F", "F'", "F2", "L", "L'", "L2", "D", "D'", "D2", "B", "B'", "B2", "M", "M'", "M2", "E", "E'", "E2", "x", "x'", "x2", "y", "y'", "y2", "z", "z'", "z2", "u", "u'", "u2", "r", "r'", "r2", "f", "f'", "f2", "l", "l'", "l2", "d", "d'", "d2", "b", "b'", "b2", "s", "s'", "s2"]

  15.     def xiaZhuan(self, List):
  16.         List[0][1], List[1][2], List[2][1], List[1][0], List[0][0], List[0][2], List[2][2], List[2][0] = List[1][0], List[0][1], List[1][2], List[2][1], List[2][0], List[0][0], List[0][2], List[2][2]
  17.         return List

  18.     def R(self):
  19.         tmp1, tmp2, tmp3 = self.shang[0][2], self.shang[1][2], self.shang[2][2]
  20.         self.shang[0][2], self.shang[1][2], self.shang[2][2] = self.qian[0][2], self.qian[1][2], self.qian[2][2]
  21.         self.qian[0][2], self.qian[1][2], self.qian[2][2] = self.xia[0][2], self.xia[1][2], self.xia[2][2]
  22.         self.xia[0][2], self.xia[1][2], self.xia[2][2] = self.hou[0][2], self.hou[1][2], self.hou[2][2]
  23.         self.hou[0][2], self.hou[1][2], self.hou[2][2] = tmp1, tmp2, tmp3
  24.         self.you = self.xiaZhuan(self.you)

  25.     def U(self):
  26.         tmp = self.qian[0].copy()
  27.         self.qian[0] = self.you[0].copy()
  28.         self.you[0] = self.hou[2][::-1]
  29.         self.hou[2] = self.zuo[0][::-1]
  30.         self.zuo[0] = tmp
  31.         self.shang = self.xiaZhuan(self.shang)

  32.     def F(self):
  33.         self.qian = self.xiaZhuan(self.qian)
  34.         tmp = self.shang[2]
  35.         self.shang[2] = [self.zuo[2][2], self.zuo[1][2], self.zuo[0][2]]
  36.         self.zuo[2][2], self.zuo[1][2], self.zuo[0][2] = self.xia[0][::-1]
  37.         self.xia[0] = [self.you[2][0], self.you[1][0], self.you[0][0]]
  38.         self.you[0][0], self.you[1][0], self.you[2][0] = tmp

  39.     def D(self):
  40.         self.xia = self.xiaZhuan(self.xia)
  41.         tmp = self.qian[2].copy()
  42.         self.qian[2] = self.zuo[2].copy()
  43.         self.zuo[2] = self.hou[0].copy()
  44.         self.hou[0] = self.you[2].copy()
  45.         self.you[2] = tmp

  46.     def L(self):
  47.         self.zuo = self.xiaZhuan(self.zuo)
  48.         tmp1, tmp2, tmp3 = self.shang[0][0], self.shang[1][0], self.shang[2][0]
  49.         self.shang[0][0], self.shang[1][0], self.shang[2][0] = self.hou[0][0], self.hou[1][0], self.hou[2][0]
  50.         self.hou[0][0], self.hou[1][0], self.hou[2][0] = self.xia[0][0], self.xia[1][0], self.xia[2][0]
  51.         self.xia[0][0], self.xia[1][0], self.xia[2][0] = self.qian[0][0], self.qian[1][0], self.qian[2][0]
  52.         self.qian[0][0], self.qian[1][0], self.qian[2][0] = tmp1, tmp2, tmp3

  53.     def B(self):
  54.         self.hou = self.xiaZhuan(self.hou)
  55.         tmp = self.shang[0]
  56.         self.shang[0] = [self.you[0][2], self.you[1][2], self.you[2][2]]
  57.         self.you[0][2], self.you[1][2], self.you[2][2] = self.xia[2]
  58.         self.xia[2] = [self.zuo[0][0], self.zuo[1][0], self.zuo[2][0]]
  59.         self.zuo[0][0], self.zuo[1][0], self.zuo[2][0] = tmp

  60.     def M(self):
  61.         tmp1, tmp2, tmp3 = self.shang[0][1], self.shang[1][1], self.shang[2][1]
  62.         self.shang[0][1], self.shang[1][1], self.shang[2][1] = self.hou[0][1], self.hou[1][1], self.hou[2][1]
  63.         self.hou[0][1], self.hou[1][1], self.hou[2][1] = self.xia[0][1], self.xia[1][1], self.xia[2][1]
  64.         self.xia[0][1], self.xia[1][1], self.xia[2][1] = self.qian[0][1], self.qian[1][1], self.qian[2][1]
  65.         self.qian[0][1], self.qian[1][1], self.qian[2][1] = tmp1, tmp2, tmp3

  66.     def E(self):
  67.         tmp = self.qian[1].copy()
  68.         self.qian[1] = self.zuo[1].copy()
  69.         self.zuo[1] = self.hou[1].copy()
  70.         self.hou[1] = self.you[1].copy()
  71.         self.you[1] = tmp

  72.     def x(self):
  73.         self.mingLing("R M' L'")

  74.     def y(self):
  75.         self.mingLing("U E' D'")

  76.     def z(self):
  77.         self.mingLing("F y M y' B'")

  78.     def r(self):
  79.         self.mingLing("R M'")

  80.     def u(self):
  81.         self.mingLing("U E'")

  82.     def f(self):
  83.         self.mingLing("z D")

  84.     def d(self):
  85.         self.mingLing("D E")
  86.    
  87.     def l(self):
  88.         self.mingLing("x' R")

  89.     def b(self):
  90.         self.mingLing("z' F")

  91.     def s(self):
  92.         self.mingLing("b' B")

  93.     def mingLing(self, mingling: str):
  94.         minglingList = mingling.split(" ")
  95.         for i in minglingList:
  96.             if i in self.zhiLing:
  97.                 xiabiao = self.zhiLing.index(i) + 1
  98.                 xiabiao = xiabiao // 3 - 1 if xiabiao % 3 == 0 else xiabiao // 3
  99.                 if "'" in i:
  100.                     for i in range(3):
  101.                         self.caoZuoList[xiabiao]()
  102.                 elif "2" in i:
  103.                     self.caoZuoList[xiabiao]()
  104.                     self.caoZuoList[xiabiao]()
  105.                 else:
  106.                     self.caoZuoList[xiabiao]()

  107. width, height = 600, 600
  108. color = [(255, 255, 0), (255, 255, 255), (255, 0, 0), (255, 140, 0), (0, 0, 255), (0, 255, 0)]
  109. icon = pygame.image.load('imgs/icon.png')
  110. mofang = moFang(
  111. """\
  112. 1 1 1
  113. 1 1 1
  114. 1 1 1\
  115. """,
  116. """\
  117. 2 2 2
  118. 2 2 2
  119. 2 2 2\
  120. """,
  121. """\
  122. 3 3 3
  123. 3 3 3
  124. 3 3 3\
  125. """,
  126. """\
  127. 4 4 4
  128. 4 4 4
  129. 4 4 4\
  130. """,
  131. """\
  132. 5 5 5
  133. 5 5 5
  134. 5 5 5\
  135. """,
  136. """\
  137. 6 6 6
  138. 6 6 6
  139. 6 6 6\
  140. """
  141. )
  142. mianPos = [(0, 0, 90, 90), (0, 0, 90, 30), (0, 60, 90, 30), (0, 0, 30, 90), (60, 0, 30, 90)]
  143. jianPan = [
  144.     pygame.K_r, pygame.K_u, pygame.K_f, pygame.K_d, pygame.K_l, pygame.K_b, pygame.K_m, pygame.K_e,
  145.     pygame.K_t, pygame.K_i, pygame.K_g, pygame.K_c, pygame.K_k, pygame.K_v,
  146.     pygame.K_x, pygame.K_y, pygame.K_z, pygame.K_s
  147. ]
  148. caoZuo = [
  149.     "R", "U", "F", "D", "L", "B", "M", "E",
  150.     "r", "u", "f", "d", "l", "b",
  151.     "x", "y", "z", "s"
  152. ]
  153. jiayin = False
  154. window = pygame.display.set_mode((width, height))
  155. pygame.display.set_caption("魔方")
  156. pygame.display.set_icon(icon)

  157. def zhuangTai(zhuangtai: list, x: int, y: int):
  158.     my_x, my_y = x, y
  159.     for i in zhuangtai:
  160.         for j in i:
  161.             pygame.draw.rect(window, color[j - 1], (my_x, my_y, 30, 30))
  162.             my_x += 30
  163.         my_y += 30
  164.         my_x = x
  165.     for i in range(5):
  166.         pygame.draw.rect(window, (0, 0, 0), (mianPos[i][0] + x, mianPos[i][1] + y, mianPos[i][2], mianPos[i][3]), 5)

  167. while True:
  168.     pygame.time.Clock().tick(60)

  169.     window.fill((255, 255, 255))
  170.     zhuangTai(mofang.shang, 255, 105)
  171.     zhuangTai(mofang.qian, 255, 105 + 90 + 10)
  172.     zhuangTai(mofang.xia, 255, 105 + 90 * 2 + 10 * 2)
  173.     zhuangTai(mofang.hou, 255, 105 + 90 * 3 + 10 * 3)
  174.     zhuangTai(mofang.zuo, 155, 105 + 90 + 10)
  175.     zhuangTai(mofang.you, 155 + 10 * 2 + 90 + 90, 105 + 90 + 10)
  176.     for event in pygame.event.get():
  177.         if event.type == pygame.QUIT:
  178.             pygame.quit()
  179.             sys.exit()
  180.         elif event.type == pygame.KEYDOWN:
  181.             if event.key == pygame.K_ESCAPE:
  182.                 pygame.quit()
  183.                 sys.exit()
  184.             elif event.key == pygame.K_n:
  185.                 jiayin = not jiayin
  186.             elif event.key in jianPan:
  187.                 s = caoZuo[jianPan.index(event.key)]
  188.                 if jiayin:
  189.                     s += "'"
  190.                 mofang.mingLing(s)

  191.     pygame.display.update()
复制代码


求评分!

Update

2023/7/1

发表

2023/7/2

看见了 不二如是 大神的 申精#文章格式建议【官方指导】小甲鱼 老师的 精华帖申请指南及奖励,赶紧更改了下格式嘿嘿

评分

参与人数 16荣誉 +54 鱼币 +49 贡献 +21 收起 理由
陈尚涵 + 3 + 3 + 3 鱼0有你更精彩^_^
小甲鱼 + 2 + 3 + 3 鱼C有你更精彩^_^
myd0313 + 1 + 1 鱼D有你更精彩^_^
myd0311 + 1 + 1 鱼B有你更精彩^_^
python爱好者. + 5 + 5 + 3 鱼C有你更精彩^_^
sfqxx_小 + 5 + 5 + 3
yinda_peng + 4 + 5 鱼C有你更精彩^_^
liuhongrun2022 + 5 + 5 + 3
歌者文明清理员 + 5 + 3
学习编程中的Ben + 5

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-1 17:40:53 | 显示全部楼层
p y g l e t
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-1 17:42:13 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 19:00:05 | 显示全部楼层
不玩魔方,才刚来,零基础的我也看不懂代码,但觉得好厉害

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
Ewan-Ahiouy + 1 + 1 加油!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 21:00:46 | 显示全部楼层

回帖奖励 +2 鱼币

666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-1 23:49:29 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-1 23:51:56 | 显示全部楼层
另外你提到输入框的问题,Pygame是没有输入框滴
可以把这些动作做成按钮,按钮就用一个长方形,用pygame.font渲染字体,blit上去,然后处理MOUSEBUTTONUP事件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-2 06:50:57 | 显示全部楼层
歌者文明清理员 发表于 2023-7-1 23:51
另外你提到输入框的问题,Pygame是没有输入框滴
可以把这些动作做成按钮,按钮就用一个长方形,用pygame.f ...

那得放多少个按钮啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-2 08:55:06 | 显示全部楼层

回帖奖励 +2 鱼币

66666666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-2 08:56:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-2 09:18:48 | 显示全部楼层

回帖奖励 +2 鱼币

厉害!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-2 09:20:50 | 显示全部楼层

回帖奖励 +2 鱼币

很厉害呀,评分!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-2 09:32:15 | 显示全部楼层
yinda_peng 发表于 2023-7-2 09:20
很厉害呀,评分!

不敢当
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-2 09:32:48 | 显示全部楼层

不敢当不敢当

一个蒟蒻而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-2 09:41:24 | 显示全部楼层

回帖奖励 +2 鱼币

还在学习中,感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-2 09:45:46 | 显示全部楼层
Ewan-Ahiouy 发表于 2023-7-2 09:32
不敢当不敢当

一个蒟蒻而已

我比你还蒻
%%%
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-2 10:32:16 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-2 10:46:01 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-2 12:16:57 | 显示全部楼层

回帖奖励 +2 鱼币

好强
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-2 13:45:24 | 显示全部楼层
Ewan-Ahiouy 发表于 2023-7-2 06:50
那得放多少个按钮啊

就是这样呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 14:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表