Movatterモバイル変換


[0]ホーム

URL:


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

Commitda75dbf

Browse files
committed
add snake game tutorial
1 parentc2305e5 commitda75dbf

File tree

4 files changed

+159
-0
lines changed

4 files changed

+159
-0
lines changed

‎README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,5 +279,6 @@ This is a repository of all the tutorials of [The Python Code](https://www.thepy
279279
-[How to Build a GUI Language Translator App in Python](https://www.thepythoncode.com/article/build-a-gui-language-translator-tkinter-python). ([code](gui-programming/gui-language-translator))
280280
-[How to Make an Image Editor in Python](https://www.thepythoncode.com/article/make-an-image-editor-in-tkinter-python). ([code](gui-programming/image-editor))
281281
-[How to Make a Checkers Game with Pygame in Python](https://www.thepythoncode.com/article/make-a-checkers-game-with-pygame-in-python). ([code](gui-programming/checkers-game))
282+
-[How to Make a Snake Game in Python](https://www.thepythoncode.com/article/make-a-snake-game-with-pygame-in-python). ([code](gui-programming/snake-game))
282283

283284
For any feedback, please consider pulling requests.

‎gui-programming/snake-game/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#[How to Make a Snake Game in Python](https://www.thepythoncode.com/article/make-a-snake-game-with-pygame-in-python)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pygame

‎gui-programming/snake-game/snake.py

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
importpygame
2+
importrandom
3+
4+
# setting up some initial parameters
5+
WIDTH,HEIGHT=600,600
6+
BLOCK_SIZE=20
7+
8+
pygame.font.init()
9+
score_font=pygame.font.SysFont("consolas",20)# or any other font you'd like
10+
score=0
11+
12+
# color definition
13+
WHITE= (255,255,255)
14+
RED= (255,0,0)
15+
16+
# initialize pygame
17+
pygame.init()
18+
19+
# setting up display
20+
win=pygame.display.set_mode((WIDTH,HEIGHT))
21+
22+
# setting up clock
23+
clock=pygame.time.Clock()
24+
25+
# snake and food initialization
26+
snake_pos= [[WIDTH//2,HEIGHT//2]]
27+
snake_speed= [0,BLOCK_SIZE]
28+
29+
teleport_walls=True# set this to True to enable wall teleporting
30+
31+
32+
defgenerate_food():
33+
whileTrue:
34+
x=random.randint(0, (WIDTH-BLOCK_SIZE)//BLOCK_SIZE )*BLOCK_SIZE
35+
y=random.randint(0, (HEIGHT-BLOCK_SIZE)//BLOCK_SIZE )*BLOCK_SIZE
36+
food_pos= [x,y]
37+
iffood_posnotinsnake_pos:
38+
returnfood_pos
39+
40+
food_pos=generate_food()
41+
42+
defdraw_objects():
43+
win.fill((0,0,0))
44+
forposinsnake_pos:
45+
pygame.draw.rect(win,WHITE,pygame.Rect(pos[0],pos[1],BLOCK_SIZE,BLOCK_SIZE))
46+
pygame.draw.rect(win,RED,pygame.Rect(food_pos[0],food_pos[1],BLOCK_SIZE,BLOCK_SIZE))
47+
# Render the score
48+
score_text=score_font.render(f"Score:{score}",True,WHITE)
49+
win.blit(score_text, (10,10))# draws the score on the top-left corner
50+
51+
52+
defupdate_snake():
53+
globalfood_pos,score
54+
new_head= [snake_pos[0][0]+snake_speed[0],snake_pos[0][1]+snake_speed[1]]
55+
56+
ifteleport_walls:
57+
# if the new head position is outside of the screen, wrap it to the other side
58+
ifnew_head[0]>=WIDTH:
59+
new_head[0]=0
60+
elifnew_head[0]<0:
61+
new_head[0]=WIDTH-BLOCK_SIZE
62+
ifnew_head[1]>=HEIGHT:
63+
new_head[1]=0
64+
elifnew_head[1]<0:
65+
new_head[1]=HEIGHT-BLOCK_SIZE
66+
67+
ifnew_head==food_pos:
68+
food_pos=generate_food()# generate new food
69+
score+=1# increment score when food is eaten
70+
else:
71+
snake_pos.pop()# remove the last element from the snake
72+
73+
snake_pos.insert(0,new_head)# add the new head to the snake
74+
75+
76+
defgame_over():
77+
# game over when snake hits the boundaries or runs into itself
78+
ifteleport_walls:
79+
returnsnake_pos[0]insnake_pos[1:]
80+
else:
81+
returnsnake_pos[0]insnake_pos[1:]or \
82+
snake_pos[0][0]>WIDTH-BLOCK_SIZEor \
83+
snake_pos[0][0]<0or \
84+
snake_pos[0][1]>HEIGHT-BLOCK_SIZEor \
85+
snake_pos[0][1]<0
86+
87+
88+
defgame_over_screen():
89+
globalscore
90+
win.fill((0,0,0))
91+
game_over_font=pygame.font.SysFont("consolas",50)
92+
game_over_text=game_over_font.render(f"Game Over! Score:{score}",True,WHITE)
93+
win.blit(game_over_text, (WIDTH//2-game_over_text.get_width()//2,HEIGHT//2-game_over_text.get_height()//2))
94+
pygame.display.update()
95+
96+
whileTrue:
97+
foreventinpygame.event.get():
98+
ifevent.type==pygame.QUIT:
99+
pygame.quit()
100+
return
101+
ifevent.type==pygame.KEYDOWN:
102+
ifevent.key==pygame.K_r:
103+
run()# replay the game
104+
return
105+
elifevent.key==pygame.K_q:
106+
pygame.quit()# quit the game
107+
return
108+
109+
110+
111+
defrun():
112+
globalsnake_speed,snake_pos,food_pos,score
113+
snake_pos= [[WIDTH//2,HEIGHT//2]]
114+
snake_speed= [0,BLOCK_SIZE]
115+
food_pos=generate_food()
116+
score=0
117+
running=True
118+
whilerunning:
119+
foreventinpygame.event.get():
120+
ifevent.type==pygame.QUIT:
121+
running=False
122+
keys=pygame.key.get_pressed()
123+
forkeyinkeys:
124+
ifkeys[pygame.K_UP]:
125+
# when UP is pressed but the snake is moving down, ignore the input
126+
ifsnake_speed[1]==BLOCK_SIZE:
127+
continue
128+
snake_speed= [0,-BLOCK_SIZE]
129+
ifkeys[pygame.K_DOWN]:
130+
# when DOWN is pressed but the snake is moving up, ignore the input
131+
ifsnake_speed[1]==-BLOCK_SIZE:
132+
continue
133+
snake_speed= [0,BLOCK_SIZE]
134+
ifkeys[pygame.K_LEFT]:
135+
# when LEFT is pressed but the snake is moving right, ignore the input
136+
ifsnake_speed[0]==BLOCK_SIZE:
137+
continue
138+
snake_speed= [-BLOCK_SIZE,0]
139+
ifkeys[pygame.K_RIGHT]:
140+
# when RIGHT is pressed but the snake is moving left, ignore the input
141+
ifsnake_speed[0]==-BLOCK_SIZE:
142+
continue
143+
snake_speed= [BLOCK_SIZE,0]
144+
145+
draw_objects()
146+
update_snake()
147+
ifgame_over():
148+
game_over_screen()
149+
break
150+
pygame.display.update()
151+
clock.tick(10)
152+
pygame.quit()
153+
154+
155+
if__name__=='__main__':
156+
run()

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp