鱼C论坛

 找回密码
 立即注册
查看: 2164|回复: 6

[已解决]pygame游戏

[复制链接]
发表于 2020-10-24 17:45:57 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 叼辣条闯世界 于 2020-10-24 18:17 编辑

有那些用pygame做的游戏吗?
please在评论区告诉我哦
最佳答案
2020-10-24 18:38:17
>>>用1500行pyrhon代码写一个简约完善功能的飞机大战
https://fishc.com.cn/thread-82613-1-1.html
(出处: 鱼C论坛)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-24 17:47:39 | 显示全部楼层
本帖最后由 叼辣条闯世界 于 2020-10-24 17:49 编辑

快点告诉作者哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 17:51:52 | 显示全部楼层
小甲鱼的行吗?
可以设置成问题帖哦~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-24 18:18:17 | 显示全部楼层
嘉岳呀 发表于 2020-10-24 17:51
小甲鱼的行吗?
可以设置成问题帖哦~

可以呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-24 18:33:08 | 显示全部楼层
类似于这种

  1. import pygame
  2. import random
  3. from pygame.locals import *
  4. pygame.init()

  5. font = pygame.font.Font(None, 20)

  6. screen = pygame.display.set_mode((160, 160))
  7. screen.fill((0, 0, 0, 0))

  8. class Block():
  9.     def __init__(self, x, y):
  10.         self.value = 0
  11.         self.x = x*40
  12.         self.y = y*40

  13.     def set_value(self, value):
  14.         self.value = value
  15.         block = pygame.surface.Surface((40, 40))
  16.         block.fill((0, 0, 0))
  17.         pygame.draw.rect(block, (0, 255, 0), (1, 1, 38, 38), 1)
  18.         if self.value:
  19.             text = font.render(str(value), True, (0, 255, 0))
  20.             block.blit(text, (20-text.get_width()/2, 20-text.get_height()/2))
  21.         self.block = block.copy()

  22.     def draw(self):
  23.         screen.blit(self.block, (self.x, self.y))


  24. blocks = []
  25. for y in range(4):
  26.     temp = []
  27.     for x in range(4):
  28.         block = Block(x, y)
  29.         block.set_value(0)
  30.         temp.append(block)
  31.     blocks.append(temp)

  32. for block in random.sample([blocks[i][j] for i in range(4) for j in range(4)], 2):
  33.     block.set_value(2)
  34.    

  35. for row in blocks:
  36.     for block in row:
  37.         block.draw()
  38. pygame.display.flip()
  39. direction = 0   #0 for stop;1 for right;2 for down;3 for left; 4 for up

  40. def get_sequence(index, direction):
  41.     if direction % 2 == 1:
  42.         temp = [blocks[index][j].value for j in range(4)]
  43.     else:
  44.         temp = [blocks[i][index].value for i in range(4)]
  45.     return temp if direction > 2 else list(reversed(temp))

  46. def set_sequence(index, direction, sequence):
  47.     if direction % 2 == 1:
  48.         path = [(index, j) for j in range(4)]
  49.     else:
  50.         path = [(i, index) for i in range(4)]
  51.     if direction <= 2:
  52.         path.reverse()
  53.     for p in range(4):
  54.         blocks[path[p][0]][path[p][1]].set_value(sequence[p])

  55. def move(sequence):
  56.     sequence = list(filter(lambda x:x, sequence))
  57.     n = len(sequence)
  58.     sequence += [0]*(4-n)
  59.     i = 0
  60.     res = []
  61.     while i < n:
  62.         if i < 3 and sequence[i] == sequence[i+1]:
  63.             res.append(sequence[i]*2)
  64.             i += 2
  65.         else:
  66.             res.append(sequence[i])
  67.             i += 1
  68.     res += [0]*(4-len(res))
  69.     return res
  70.             

  71. while True:
  72.     for event in pygame.event.get():
  73.         if event.type == QUIT:
  74.             exit()

  75.         if event.type == KEYDOWN:
  76.             if event.key == K_RIGHT:
  77.                 direction = 1
  78.             elif event.key == K_DOWN:
  79.                 direction = 2
  80.             elif event.key == K_LEFT:
  81.                 direction = 3
  82.             elif event.key == K_UP:
  83.                 direction = 4

  84.     if direction:
  85.         for index in range(4):
  86.             sequence = get_sequence(index, direction)
  87.             sequence = move(sequence)
  88.             set_sequence(index, direction, sequence)

  89.         if 2048 in [blocks[i][j].value for i in range(4) for j in range(4)]:
  90.             end = font.render('GAME OVER: YOU WIN!', True, (0, 255, 0))
  91.             screen.fill((0, 0, 0))
  92.             screen.blit(end, (80-end.get_width()/2, 80-end.get_height()/2))
  93.             pygame.display.flip()
  94.             while True:
  95.                 for event in pygame.event.wait():
  96.                     if event.type == QUIT:
  97.                         exit()
  98.         temp = list(filter(lambda x:not x.value, [blocks[i][j]for i in range(4) for j in range(4)]))
  99.         if temp:
  100.             block = random.choice(temp)
  101.             block.set_value(random.choices([2, 4], weights=[5, 1])[0])
  102.         else:
  103.             over = font.render('GAME OVER: YOU LOSE!', True, (0, 255, 0))
  104.             leave = font.render('[Enter] to try again', True, (0, 255, 0))
  105.             screen.fill((0, 0, 0))
  106.             screen.blit(over, (80-over.get_width()/2, 70-over.get_height()/2))
  107.             screen.blit(leave, (80-leave.get_width()/2, 110-leave.get_height()/2))
  108.             pygame.display.flip()
  109.             while True:
  110.                 on = False
  111.                 for event in pygame.event.get():
  112.                     if event.type == QUIT:
  113.                         exit()
  114.                     if event.type == KEYDOWN:
  115.                         if event.key == K_RETURN:
  116.                             blocks = []
  117.                             for y in range(4):
  118.                                 temp = []
  119.                                 for x in range(4):
  120.                                     block = Block(x, y)
  121.                                     block.set_value(0)
  122.                                     temp.append(block)
  123.                                 blocks.append(temp)

  124.                             for block in random.sample([blocks[i][j] for i in range(4) for j in range(4)], 2):
  125.                                 block.set_value(2)
  126.                             on = True
  127.                 if on:
  128.                     break
  129.         screen.fill((0, 0, 0))
  130.         for row in blocks:
  131.             for block in row:
  132.                 block.draw()
  133.         pygame.display.flip()
  134.         direction = 0
复制代码

原贴:https://fishc.com.cn/thread-151973-1-1.html
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-24 18:38:17 | 显示全部楼层    本楼为最佳答案   
&gt;&gt;&gt;用1500行pyrhon代码写一个简约完善功能的飞机大战
https://fishc.com.cn/thread-82613-1-1.html
(出处: 鱼C论坛)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-28 17:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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