python小游戏——乒乓球大战

简介: python小游戏——乒乓球大战

1.调用外部库

pygame

2.代码实现

1. import pygame
2. import random
3. import sys
4. 
5. # Initialize Pygame
6. pygame.init()
7. 
8. # Set up the window
9. WINDOW_WIDTH = 800
10. WINDOW_HEIGHT = 600
11. WINDOW = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
12. pygame.display.set_caption("Ping Pong Game")
13. 
14. # Set up the colors
15. BLACK = (0, 0, 0)
16. WHITE = (255, 255, 255)
17. 
18. # Set up the fonts
19. FONT = pygame.font.SysFont(None, 48)
20. 
21. # Set up the ball
22. BALL_RADIUS = 10
23. ball_x = WINDOW_WIDTH // 2
24. ball_y = WINDOW_HEIGHT // 2
25. ball_dx = 5
26. ball_dy = 5
27. 
28. # Set up the player's paddle
29. PLAYER_PADDLE_WIDTH = 10
30. PLAYER_PADDLE_HEIGHT = 100
31. player_paddle_x = WINDOW_WIDTH - PLAYER_PADDLE_WIDTH - 10
32. player_paddle_y = WINDOW_HEIGHT // 2 - PLAYER_PADDLE_HEIGHT // 2
33. player_paddle_dy = 0
34. 
35. # Set up the computer's paddle
36. COMPUTER_PADDLE_WIDTH = 10
37. COMPUTER_PADDLE_HEIGHT = 100
38. computer_paddle_x = 10
39. computer_paddle_y = WINDOW_HEIGHT // 2 - COMPUTER_PADDLE_HEIGHT // 2
40. computer_paddle_dy = 5
41. 
42. # Set up the scores
43. player_score = 0
44. computer_score = 0
45. player_str = ""
46. computer_str = ""
47. 
48. # Set up the game state
49. game_state = "start"
50. space_state = "0"
51. 
52. # Set up the clock
53. clock = pygame.time.Clock()
54. 
55. # Set up the main game loop
56. while True:
57. # Handle events
58. for event in pygame.event.get():
59. if event.type == pygame.QUIT:
60.             pygame.quit()
61.             sys.exit()
62. elif event.type == pygame.KEYDOWN:
63. if event.key == pygame.K_UP:
64.                 player_paddle_dy = -5
65. elif event.key == pygame.K_DOWN:
66.                 player_paddle_dy = 5
67. elif event.key == pygame.K_SPACE:
68. if space_state == "0":
69.                     space_state = "1"
70. #print(f"DOWN, space_state: {space_state}, {game_state}, {computer_score}", flush=True)
71. elif event.type == pygame.KEYUP:
72. if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
73.                 player_paddle_dy = 0
74. elif event.key == pygame.K_SPACE:
75. if space_state != "1": continue
76. #print(f"  UP, space_state: {space_state}, {game_state}, {computer_score}", flush=True)
77.                 space_state = "0"
78. if game_state == "start":
79.                     game_state = "playing"
80.                     ball_dx = -ball_dx
81.                     ball_dy = -ball_dy
82. #ball_dx = random.choice([-5, 5])
83. #ball_dy = random.choice([-5, 5])
84. #elif event.type == pygame.MOUSEBUTTONDOWN:
85. #elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
86. #    if game_state == "start":
87. #        game_state = "playing"
88. #        ball_dx = random.choice([-5, 5])
89. #        ball_dy = random.choice([-5, 5])
90. 
91. # Update the game state
92. if game_state == "playing":
93. # Move the ball
94.         ball_x += ball_dx
95.         ball_y += ball_dy
96. 
97. # Bounce the ball off the top or bottom of the window
98. if ball_y - BALL_RADIUS <= 0 or ball_y + BALL_RADIUS >= WINDOW_HEIGHT:
99.             ball_dy = -ball_dy
100. 
101. # Bounce the ball off the player's paddle
102. if ball_x + BALL_RADIUS >= player_paddle_x and ball_y >= player_paddle_y and ball_y <= player_paddle_y + PLAYER_PADDLE_HEIGHT:
103.             ball_dx = -ball_dx
104. 
105. # Bounce the ball off the computer's paddle
106. if ball_x - BALL_RADIUS <= computer_paddle_x + COMPUTER_PADDLE_WIDTH and ball_y >= computer_paddle_y and ball_y <= computer_paddle_y + COMPUTER_PADDLE_HEIGHT:
107.             ball_dx = -ball_dx
108. 
109. # Check if the ball went out of bounds
110. if ball_x - BALL_RADIUS <= 0:
111. #computer_score += 1
112.             player_score += 1
113.             game_state = "start"
114. elif ball_x + BALL_RADIUS >= WINDOW_WIDTH:
115. #player_score += 1
116.             computer_score += 1
117.             game_state = "start"
118. # 判断游戏是否结束
119. if computer_score >= 5 or player_score >= 5:
120.             game_state = "game over"
121. 
122. # Move the player's paddle
123.         player_paddle_y += player_paddle_dy
124. if player_paddle_y <= 0:
125.             player_paddle_y = 0
126. elif player_paddle_y + PLAYER_PADDLE_HEIGHT >= WINDOW_HEIGHT:
127.             player_paddle_y = WINDOW_HEIGHT - PLAYER_PADDLE_HEIGHT
128. 
129. # Move the computer's paddle
130. if ball_y < computer_paddle_y + COMPUTER_PADDLE_HEIGHT // 2:
131.             computer_paddle_dy = -5
132. elif ball_y > computer_paddle_y + COMPUTER_PADDLE_HEIGHT // 2:
133.             computer_paddle_dy = 5
134. else:
135.             computer_paddle_dy = 0
136.         computer_paddle_y += computer_paddle_dy
137. if computer_paddle_y <= 0:
138.             computer_paddle_y = 0
139. elif computer_paddle_y + COMPUTER_PADDLE_HEIGHT >= WINDOW_HEIGHT:
140.             computer_paddle_y = WINDOW_HEIGHT - COMPUTER_PADDLE_HEIGHT
141. 
142. # Draw the game
143.     WINDOW.fill(BLACK)
144. if game_state == "start":
145. #start_text = FONT.render("Press the mouse button to start", True, WHITE)
146.         start_text = FONT.render("Press space key to start", True, WHITE)
147.         start_rect = start_text.get_rect()
148.         start_rect.center = (WINDOW_WIDTH // 2, WINDOW_HEIGHT // 2)
149.         WINDOW.blit(start_text, start_rect)
150. elif game_state == "playing":
151. # Draw the ball
152.         pygame.draw.circle(WINDOW, WHITE, (ball_x, ball_y), BALL_RADIUS)
153. 
154. # Draw the player's paddle
155.         pygame.draw.rect(WINDOW, WHITE, (player_paddle_x, player_paddle_y, PLAYER_PADDLE_WIDTH, PLAYER_PADDLE_HEIGHT))
156. 
157. # Draw the computer's paddle
158.         pygame.draw.rect(WINDOW, WHITE, (computer_paddle_x, computer_paddle_y, COMPUTER_PADDLE_WIDTH, COMPUTER_PADDLE_HEIGHT))
159. 
160. # Draw the scores
161.         player_score_text = FONT.render(str(player_score), True, WHITE)
162.         player_score_rect = player_score_text.get_rect()
163.         player_score_rect.center = (WINDOW_WIDTH - 50, 50)
164.         WINDOW.blit(player_score_text, player_score_rect)
165. 
166.         computer_score_text = FONT.render(str(computer_score), True, WHITE)
167.         computer_score_rect = computer_score_text.get_rect()
168.         computer_score_rect.center = (50, 50)
169.         WINDOW.blit(computer_score_text, computer_score_rect)
170. 
171. elif game_state == "game over":
172. # Draw the game over text
173.         game_over_text = FONT.render("Game Over", True, WHITE)
174.         game_over_rect = game_over_text.get_rect()
175.         game_over_rect.center = (WINDOW_WIDTH // 2, WINDOW_HEIGHT // 2 - 50)
176.         WINDOW.blit(game_over_text, game_over_rect)
177. 
178. # Draw the final scores
179. #print(player_score, computer_score, flush=True)
180. if not player_str:
181.             player_str = f"Player Score: {player_score}"
182.             computer_str = f"Computer Score: {computer_score}"
183. 
184.         player_final_score_text = FONT.render(player_str, True, WHITE)
185.         player_final_score_rect = player_final_score_text.get_rect()
186.         player_final_score_rect.center = (WINDOW_WIDTH // 2, WINDOW_HEIGHT // 2)
187.         WINDOW.blit(player_final_score_text, player_final_score_rect)
188. 
189.         computer_final_score_text = FONT.render(computer_str, True, WHITE)
190.         computer_final_score_rect = computer_final_score_text.get_rect()
191.         computer_final_score_rect.center = (WINDOW_WIDTH // 2, WINDOW_HEIGHT // 2 + 50)
192.         WINDOW.blit(computer_final_score_text, computer_final_score_rect)
193. 
194. # Reset the scores and game state
195.         player_score = 0
196.         computer_score = 0
197.         game_state = "game over"
198. 
199. # Update the window
200.     pygame.display.update()
201. 
202. # Tick the clock
203.     clock.tick(60)
204. 
205. pygame.quit()

3.游戏实测

- 游戏包含两个参与者,一方是电脑,一方是玩家;电脑在界面左侧,玩家在界面右侧。

- 游戏界面上包含一个开始按钮,点击开始按钮后,游戏才能开始。

- 乒乓球接触球拍和界面上下边界时会反弹。

- 玩家通过Up,Down键来控制球拍的上下运动,玩家按住对应的键,球拍会保持一个方向运动。

- 电脑通过自动判断乒乓球的位置来进行移动,尽可能的将乒乓球反弹。

- 一方的球拍没有接到球的时候,对方得1分,先得够5分的一方获胜,同时游戏结束。

- 游戏结束后显示获胜的一方的角色:电脑或者玩家。

相关文章
|
存储 人工智能 运维
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
734 48
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
|
人工智能 Python
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
762 7
|
8月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
11月前
|
人工智能 搜索推荐 数据可视化
用 Python 制作简单小游戏教程:手把手教你开发猜数字游戏
本教程详细讲解了用Python实现经典猜数字游戏的完整流程,涵盖从基础规则到高级功能的全方位开发。内容包括游戏逻辑设计、输入验证与错误处理、猜测次数统计、难度选择、彩色输出等核心功能,并提供完整代码示例。同时,介绍了开发环境搭建及调试方法,帮助初学者快速上手。最后还提出了图形界面、网络对战、成就系统等扩展方向,鼓励读者自主创新,打造个性化游戏版本。适合Python入门者实践与进阶学习。
1245 1
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
785 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
UED Python
python编写小游戏
【7月更文挑战第6天】
526 1
|
开发者 Python
入门实战丨Python小游戏经典案例
入门实战丨Python小游戏经典案例
478 4
|
8月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1200 102
|
8月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
454 104
|
8月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
353 103

推荐镜像

更多