真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python實現(xiàn)貪吃蛇小游戲源碼分享

本篇內(nèi)容介紹了“Python實現(xiàn)貪吃蛇小游戲源碼分享”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

我們擁有10多年網(wǎng)頁設(shè)計和網(wǎng)站建設(shè)經(jīng)驗,從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設(shè)計師為您提供的解決方案。為企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、微信開發(fā)、重慶小程序開發(fā)公司、手機網(wǎng)站制作、H5響應(yīng)式網(wǎng)站、等業(yè)務(wù)。無論您有什么樣的網(wǎng)站設(shè)計或者設(shè)計方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計服務(wù)并滿足您的需求。

Python實現(xiàn)貪吃蛇小游戲源碼分享

今天給大家免費分享一下Python飛機游戲的源碼。

Python實現(xiàn)貪吃蛇小游戲源碼分享

Python 貪吃蛇小游戲

(聲明:本文使用的源碼非原創(chuàng),17年在CSDN上用幣下載的資源,具體是哪位大佬的忘記了) 在此之前首先說一下環(huán)境 Python3.X (使用2.x的大佬自己稍微改動一下就行) pygame 1.9.6(當然這個沒必要和我一樣)

1. 導包

## 導入相關(guān)模塊
import random
import pygame
import sys

from pygame.locals import *

2. 配置初始化參數(shù)

snake_speed = 15 #貪吃蛇的速度
windows_width = 800
windows_height = 600 #游戲窗口的大小
cell_size = 20       #貪吃蛇身體方塊大小,注意身體大小必須能被窗口長寬整除

''' #初始化區(qū)
由于我們的貪吃蛇是有大小尺寸的, 因此地圖的實際尺寸是相對于貪吃蛇的大小尺寸而言的
'''
map_width = int(windows_width / cell_size)
map_height = int(windows_height / cell_size)

# 顏色定義
white = (255, 255, 255)
black = (0, 0, 0)
gray = (230, 230, 230)
dark_gray = (40, 40, 40)
DARKGreen = (0, 155, 0)
Green = (0, 255, 0)
Red = (255, 0, 0)
blue = (0, 0, 255)
dark_blue =(0,0, 139)


BG_COLOR = black #游戲背景顏色

# 定義方向
UP = 1
DOWN = 2
LEFT = 3
RIGHT = 4

HEAD = 0 #貪吃蛇頭部下標

3. 主函數(shù)及運行主體

#主函數(shù)
def main():
	pygame.init() # 模塊初始化
	snake_speed_clock = pygame.time.Clock() # 創(chuàng)建Pygame時鐘對象
	screen = pygame.display.set_mode((windows_width, windows_height)) #
	screen.fill(white)

	pygame.display.set_caption("Python 貪吃蛇小游戲") #設(shè)置標題
	show_start_info(screen)               #歡迎信息
	while True:
		running_game(screen, snake_speed_clock)
		show_gameover_info(screen)


#游戲運行主體
def running_game(screen,snake_speed_clock):
	startx = random.randint(3, map_width - 8) #開始位置
	starty = random.randint(3, map_height - 8)
	snake_coords = [{'x': startx, 'y': starty},  #初始貪吃蛇
                  {'x': startx - 1, 'y': starty},
                  {'x': startx - 2, 'y': starty}]

	direction = RIGHT       #  開始時向右移動

	food = get_random_location()     #實物隨機位置

	while True:
		for event in pygame.event.get():
			if event.type == QUIT:
				terminate()
			elif event.type == KEYDOWN:
				if (event.key == K_LEFT or event.key == K_a) and direction != RIGHT:
					direction = LEFT
				elif (event.key == K_RIGHT or event.key == K_d) and direction != LEFT:
					direction = RIGHT
				elif (event.key == K_UP or event.key == K_w) and direction != DOWN:
					direction = UP
				elif (event.key == K_DOWN or event.key == K_s) and direction != UP:
					direction = DOWN
				elif event.key == K_ESCAPE:
					terminate()

		move_snake(direction, snake_coords) #移動蛇

		ret = snake_is_alive(snake_coords)
		if not ret:
			break #蛇跪了. 游戲結(jié)束
		snake_is_eat_food(snake_coords, food) #判斷蛇是否吃到食物

		screen.fill(BG_COLOR)
		#draw_grid(screen)
		draw_snake(screen, snake_coords)
		draw_food(screen, food)
		draw_score(screen, len(snake_coords) - 3)
		pygame.display.update()
		snake_speed_clock.tick(snake_speed) #控制fps

4. 畫食物的函數(shù)

#將食物畫出來
def draw_food(screen, food):
	x = food['x'] * cell_size
	y = food['y'] * cell_size
	appleRect = pygame.Rect(x, y, cell_size, cell_size)
	pygame.draw.rect(screen, Red, appleRect)

5. 畫貪吃蛇的函數(shù)

#將貪吃蛇畫出來
def draw_snake(screen, snake_coords):
	for coord in snake_coords:
		x = coord['x'] * cell_size
		y = coord['y'] * cell_size
		wormSegmentRect = pygame.Rect(x, y, cell_size, cell_size)
		pygame.draw.rect(screen, dark_blue, wormSegmentRect)
		wormInnerSegmentRect = pygame.Rect(                #蛇身子里面的第二層亮綠色
			x + 4, y + 4, cell_size - 8, cell_size - 8)
		pygame.draw.rect(screen, blue, wormInnerSegmentRect)

6. 畫網(wǎng)格的函數(shù)(非必選,覺得多余的可以忽略此項)

#畫網(wǎng)格(可選)
def draw_grid(screen):
	for x in range(0, windows_width, cell_size):  # draw 水平 lines
		pygame.draw.line(screen, dark_gray, (x, 0), (x, windows_height))
	for y in range(0, windows_height, cell_size):  # draw 垂直 lines
		pygame.draw.line(screen, dark_gray, (0, y), (windows_width, y))

7. 操縱貪吃蛇移動的函數(shù)

#移動貪吃蛇
def move_snake(direction, snake_coords):
    if direction == UP:
        newHead = {'x': snake_coords[HEAD]['x'], 'y': snake_coords[HEAD]['y'] - 1}
    elif direction == DOWN:
        newHead = {'x': snake_coords[HEAD]['x'], 'y': snake_coords[HEAD]['y'] + 1}
    elif direction == LEFT:
        newHead = {'x': snake_coords[HEAD]['x'] - 1, 'y': snake_coords[HEAD]['y']}
    elif direction == RIGHT:
        newHead = {'x': snake_coords[HEAD]['x'] + 1, 'y': snake_coords[HEAD]['y']}

    snake_coords.insert(0, newHead)

8. 判斷蛇是否死亡的函數(shù)

#判斷蛇死了沒
def snake_is_alive(snake_coords):
	tag = True
	if snake_coords[HEAD]['x'] == -1 or snake_coords[HEAD]['x'] == map_width or snake_coords[HEAD]['y'] == -1 or \
			snake_coords[HEAD]['y'] == map_height:
		tag = False # 蛇碰壁啦
	for snake_body in snake_coords[1:]:
		if snake_body['x'] == snake_coords[HEAD]['x'] and snake_body['y'] == snake_coords[HEAD]['y']:
			tag = False # 蛇碰到自己身體啦
	return tag

9. 判斷蛇是否吃到食物的函數(shù)

#判斷貪吃蛇是否吃到食物
def snake_is_eat_food(snake_coords, food):  #如果是列表或字典,那么函數(shù)內(nèi)修改參數(shù)內(nèi)容,就會影響到函數(shù)體外的對象。
	if snake_coords[HEAD]['x'] == food['x'] and snake_coords[HEAD]['y'] == food['y']:
		food['x'] = random.randint(0, map_width - 1)
		food['y'] = random.randint(0, map_height - 1) # 實物位置重新設(shè)置
	else:
		del snake_coords[-1]  # 如果沒有吃到實物, 就向前移動, 那么尾部一格刪掉

10. 隨機生成食物

#食物隨機生成
def get_random_location():
	return {'x': random.randint(0, map_width - 1), 'y': random.randint(0, map_height - 1)}

11. 游戲開始與結(jié)束的相關(guān)配置

#開始信息顯示
def show_start_info(screen):
	font = pygame.font.Font('myfont.ttf', 40)
	tip = font.render('按任意鍵開始游戲~~~', True, (65, 105, 225))
	gamestart = pygame.image.load('gamestart.png')
	screen.blit(gamestart, (140, 30))
	screen.blit(tip, (240, 550))
	pygame.display.update()

	while True:  #鍵盤監(jiān)聽事件
		for event in pygame.event.get():  # event handling loop
			if event.type == QUIT:
				terminate()     #終止程序
			elif event.type == KEYDOWN:
				if (event.key == K_ESCAPE):  #終止程序
					terminate() #終止程序
				else:
					return #結(jié)束此函數(shù), 開始游戲
#游戲結(jié)束信息顯示
def show_gameover_info(screen):
	font = pygame.font.Font('myfont.ttf', 40)
	tip = font.render('按Q或者ESC退出游戲, 按任意鍵重新開始游戲~', True, (65, 105, 225))
	gamestart = pygame.image.load('gameover.png')
	screen.blit(gamestart, (60, 0))
	screen.blit(tip, (80, 300))
	pygame.display.update()

	while True:  #鍵盤監(jiān)聽事件
		for event in pygame.event.get():  # event handling loop
			if event.type == QUIT:
				terminate()     #終止程序
			elif event.type == KEYDOWN:
				if event.key == K_ESCAPE or event.key == K_q:  #終止程序
					terminate() #終止程序
				else:
					return #結(jié)束此函數(shù), 重新開始游戲
#畫成績
def draw_score(screen,score):
	font = pygame.font.Font('myfont.ttf', 30)
	scoreSurf = font.render('得分: %s' % score, True, Green)
	scoreRect = scoreSurf.get_rect()
	scoreRect.topleft = (windows_width - 120, 10)
	screen.blit(scoreSurf, scoreRect)
#程序終止
def terminate():
	pygame.quit()
	sys.exit()

Python實現(xiàn)貪吃蛇小游戲源碼分享 Python實現(xiàn)貪吃蛇小游戲源碼分享

12. 函數(shù)俱備,只欠main這個東風了

main()

“Python實現(xiàn)貪吃蛇小游戲源碼分享”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


新聞名稱:Python實現(xiàn)貪吃蛇小游戲源碼分享
標題URL:http://weahome.cn/article/ipghjh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部