Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 146dc7a

Browse files
add code
1 parent 156d00e commit 146dc7a

File tree

6 files changed

+496
-0
lines changed

6 files changed

+496
-0
lines changed

‎doudou/2022-05-18-games/001.py‎

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import os
2+
import sys
3+
import random
4+
from modules import *
5+
from PyQt5.QtGui import *
6+
from PyQt5.QtCore import *
7+
from PyQt5.QtWidgets import *
8+
9+
10+
'''定义俄罗斯方块游戏类'''
11+
class TetrisGame(QMainWindow):
12+
def __init__(self, parent=None):
13+
super(TetrisGame, self).__init__(parent)
14+
# 是否暂停ing
15+
self.is_paused = False
16+
# 是否开始ing
17+
self.is_started = False
18+
self.initUI()
19+
'''界面初始化'''
20+
def initUI(self):
21+
# icon
22+
self.setWindowIcon(QIcon(os.path.join(os.getcwd(), 'resources/icon.jpg')))
23+
# 块大小
24+
self.grid_size = 22
25+
# 游戏帧率
26+
self.fps = 200
27+
self.timer = QBasicTimer()
28+
# 焦点
29+
self.setFocusPolicy(Qt.StrongFocus)
30+
# 水平布局
31+
layout_horizontal = QHBoxLayout()
32+
self.inner_board = InnerBoard()
33+
self.external_board = ExternalBoard(self, self.grid_size, self.inner_board)
34+
layout_horizontal.addWidget(self.external_board)
35+
self.side_panel = SidePanel(self, self.grid_size, self.inner_board)
36+
layout_horizontal.addWidget(self.side_panel)
37+
self.status_bar = self.statusBar()
38+
self.external_board.score_signal[str].connect(self.status_bar.showMessage)
39+
self.start()
40+
self.center()
41+
self.setWindowTitle('Tetris —— 九歌')
42+
self.show()
43+
self.setFixedSize(self.external_board.width() + self.side_panel.width(), self.side_panel.height() + self.status_bar.height())
44+
'''游戏界面移动到屏幕中间'''
45+
def center(self):
46+
screen = QDesktopWidget().screenGeometry()
47+
size = self.geometry()
48+
self.move((screen.width() - size.width()) // 2, (screen.height() - size.height()) // 2)
49+
'''更新界面'''
50+
def updateWindow(self):
51+
self.external_board.updateData()
52+
self.side_panel.updateData()
53+
self.update()
54+
'''开始'''
55+
def start(self):
56+
if self.is_started:
57+
return
58+
self.is_started = True
59+
self.inner_board.createNewTetris()
60+
self.timer.start(self.fps, self)
61+
'''暂停/不暂停'''
62+
def pause(self):
63+
if not self.is_started:
64+
return
65+
self.is_paused = not self.is_paused
66+
if self.is_paused:
67+
self.timer.stop()
68+
self.external_board.score_signal.emit('Paused')
69+
else:
70+
self.timer.start(self.fps, self)
71+
self.updateWindow()
72+
'''计时器事件'''
73+
def timerEvent(self, event):
74+
if event.timerId() == self.timer.timerId():
75+
removed_lines = self.inner_board.moveDown()
76+
self.external_board.score += removed_lines
77+
self.updateWindow()
78+
else:
79+
super(TetrisGame, self).timerEvent(event)
80+
'''按键事件'''
81+
def keyPressEvent(self, event):
82+
if not self.is_started or self.inner_board.current_tetris == tetrisShape().shape_empty:
83+
super(TetrisGame, self).keyPressEvent(event)
84+
return
85+
key = event.key()
86+
# P键暂停
87+
if key == Qt.Key_P:
88+
self.pause()
89+
return
90+
if self.is_paused:
91+
return
92+
# 向左
93+
elif key == Qt.Key_Left:
94+
self.inner_board.moveLeft()
95+
# 向右
96+
elif key == Qt.Key_Right:
97+
self.inner_board.moveRight()
98+
# 旋转
99+
elif key == Qt.Key_Up:
100+
self.inner_board.rotateAnticlockwise()
101+
# 快速坠落
102+
elif key == Qt.Key_Space:
103+
self.external_board.score += self.inner_board.dropDown()
104+
else:
105+
super(TetrisGame, self).keyPressEvent(event)
106+
self.updateWindow()
107+
108+
109+
'''run'''
110+
if __name__ == '__main__':
111+
app = QApplication([])
112+
tetris = TetrisGame()
113+
sys.exit(app.exec_())

‎doudou/2022-05-18-games/002.py‎

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import os
2+
import sys
3+
import cfg
4+
import pygame
5+
from modules import *
6+
7+
8+
'''游戏主程序'''
9+
def main():
10+
pygame.init()
11+
screen = pygame.display.set_mode(cfg.SCREENSIZE)
12+
pygame.display.set_caption('Gemgem —— 九歌')
13+
# 加载背景音乐
14+
pygame.mixer.init()
15+
pygame.mixer.music.load(os.path.join(cfg.ROOTDIR, "resources/audios/bg.mp3"))
16+
pygame.mixer.music.set_volume(0.6)
17+
pygame.mixer.music.play(-1)
18+
# 加载音效
19+
sounds = {}
20+
sounds['mismatch'] = pygame.mixer.Sound(os.path.join(cfg.ROOTDIR, 'resources/audios/badswap.wav'))
21+
sounds['match'] = []
22+
for i in range(6):
23+
sounds['match'].append(pygame.mixer.Sound(os.path.join(cfg.ROOTDIR, 'resources/audios/match%s.wav' % i)))
24+
# 加载字体
25+
font = pygame.font.Font(os.path.join(cfg.ROOTDIR, 'resources/font/font.TTF'), 25)
26+
# 图片加载
27+
gem_imgs = []
28+
for i in range(1, 8):
29+
gem_imgs.append(os.path.join(cfg.ROOTDIR, 'resources/images/gem%s.png' % i))
30+
# 主循环
31+
game = gemGame(screen, sounds, font, gem_imgs, cfg)
32+
while True:
33+
score = game.start()
34+
flag = False
35+
# 一轮游戏结束后玩家选择重玩或者退出
36+
while True:
37+
for event in pygame.event.get():
38+
if event.type == pygame.QUIT or (event.type == pygame.KEYUP and event.key == pygame.K_ESCAPE):
39+
pygame.quit()
40+
sys.exit()
41+
elif event.type == pygame.KEYUP and event.key == pygame.K_r:
42+
flag = True
43+
if flag:
44+
break
45+
screen.fill((135, 206, 235))
46+
text0 = 'Final score: %s' % score
47+
text1 = 'Press <R> to restart the game.'
48+
text2 = 'Press <Esc> to quit the game.'
49+
y = 150
50+
for idx, text in enumerate([text0, text1, text2]):
51+
text_render = font.render(text, 1, (85, 65, 0))
52+
rect = text_render.get_rect()
53+
if idx == 0:
54+
rect.left, rect.top = (212, y)
55+
elif idx == 1:
56+
rect.left, rect.top = (122.5, y)
57+
else:
58+
rect.left, rect.top = (126.5, y)
59+
y += 100
60+
screen.blit(text_render, rect)
61+
pygame.display.update()
62+
game.reset()
63+
64+
65+
'''run'''
66+
if __name__ == '__main__':
67+
main()

‎doudou/2022-05-18-games/003.py‎

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
from random import randrange
2+
from turtle import *
3+
from freegames import square, vector
4+
5+
food = vector(0, 0)
6+
snake = [vector(10, 0)]
7+
aim = vector(0, -10)
8+
9+
10+
def change(x, y):
11+
"""Change snake direction."""
12+
aim.x = x
13+
aim.y = y
14+
15+
16+
def inside(head):
17+
"""Return True if head inside boundaries."""
18+
return -200 < head.x < 190 and -200 < head.y < 190
19+
20+
21+
def move():
22+
"""Move snake forward one segment."""
23+
head = snake[-1].copy()
24+
head.move(aim)
25+
26+
if not inside(head) or head in snake:
27+
square(head.x, head.y, 9, 'red')
28+
update()
29+
return
30+
31+
snake.append(head)
32+
33+
if head == food:
34+
print('Snake:', len(snake))
35+
food.x = randrange(-15, 15) * 10
36+
food.y = randrange(-15, 15) * 10
37+
else:
38+
snake.pop(0)
39+
40+
clear()
41+
42+
for body in snake:
43+
square(body.x, body.y, 9, 'black')
44+
45+
square(food.x, food.y, 9, 'green')
46+
update()
47+
ontimer(move, 100)
48+
49+
50+
setup(420, 420, 370, 0)
51+
hideturtle()
52+
tracer(False)
53+
listen()
54+
onkey(lambda: change(10, 0), 'Right')
55+
onkey(lambda: change(-10, 0), 'Left')
56+
onkey(lambda: change(0, 10), 'Up')
57+
onkey(lambda: change(0, -10), 'Down')
58+
move()
59+
done()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /