婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python 實現簡單的吃豆人游戲

python 實現簡單的吃豆人游戲

熱門標簽:廣東旅游地圖標注 蘇州人工外呼系統軟件 打印谷歌地圖標注 電話機器人貸款詐騙 看懂地圖標注方法 電話外呼系統招商代理 淮安呼叫中心外呼系統如何 京華圖書館地圖標注 佛山通用400電話申請

效果展示:

程序簡介

1.使用pygame模組
2.在material目錄下有一些素材
3.吃豆人的游戲主體
4.吃豆人怪物的AI(未使用深度學習)

主要代碼

main.py

import pygame, sys
from pygame.locals import *
from unit import user, enemy
import random

#constant initialize
FPS = 60
BLOCK_SIZE = 24
WIDTH = 29
HEIGHT = 15
WINDOW_WIDTH = WIDTH * BLOCK_SIZE
WINDOW_HEIGHT = HEIGHT * BLOCK_SIZE
MAP_NAME = "./material/map.maze"
BGM_NAME = "./material/bgm.ogg"
BLOCK_IMAGE = "./material/block.png"
FOOD_IMAGE = "./material/food.png"
GAMEOVER_IMAGE = "./material/gameover.png"
SERVER_PORT = 30000
ENEMY_COUNT = 4
OX = 1
OY = 1
DELAY = 8

#pygame initialize
pygame.init()
display = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
clock = pygame.time.Clock()
block_image = pygame.image.load(BLOCK_IMAGE)
food_image = pygame.image.load(FOOD_IMAGE)
gameover_image = pygame.image.load(GAMEOVER_IMAGE)
bgm = pygame.mixer.music.load(BGM_NAME)
scene = "game"
unit_list = []
game_map = []

#map initialize
def load_map(filename):
	global game_map
	game_map.clear()
	file = open(filename, 'r')
	for line in file.readlines():
		game_map.append(list(line.strip()))
		pass
	pass

#set passport
def through(position):
	x = position[0]
	y = position[1]
	in_range = (x >= 0 and x  WIDTH) and (y >= 0 and y  HEIGHT)
	in_space = (not game_map[y][x] == '1')
	return (in_range and in_space)
	pass

#gameover?
def check_gameover(user_pos, enemy_pos):
	global scene
	gameover = (enemy_pos[0] == user_pos[0] and enemy_pos[1] == user_pos[1])
	if gameover:
		scene = "gameover"
		pass
	return gameover
	pass

#gameover
def gameover():
	pygame.mixer.music.stop()
	keys = pygame.key.get_pressed()
	if keys[K_RETURN]:
		initialize()
		pass
	display.fill((0, 0, 0))
	x = (WINDOW_WIDTH-gameover_image.get_width())/2
	y = (WINDOW_HEIGHT-gameover_image.get_height())/2
	display.blit(gameover_image, (x, y))
	pygame.display.update()
	pass

#unit initialize
def initialize_unit():
	unit_list.clear()
	ox = random.randint(1, WIDTH - 2)
	oy = random.randint(1, HEIGHT - 2)
	while not through((ox, oy)):
		ox = random.randint(1, WIDTH - 2)
		oy = random.randint(1, HEIGHT - 2)
	unit_list.append(user(OX, OY))
	for i in range(0, ENEMY_COUNT):
		enemy_color = i % 4
		ox = random.randint(1, WIDTH - 2)
		oy = random.randint(1, HEIGHT - 2)
		while not through((ox, oy)):
			ox = random.randint(1, WIDTH - 2)
			oy = random.randint(1, HEIGHT - 2)
		unit_list.append(enemy(enemy_color, ox, oy))
		pass
	pass

#initialize
def initialize():
	global scene
	load_map(MAP_NAME)
	initialize_unit()
	scene = "game"
	pygame.mixer.music.play(-1)

#system update
def system_update():
	clock.tick(FPS)
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			sys.exit()
	pass

#update control
control_clock = [0, DELAY]
def control_update():
	#user control
	if control_clock[0] > control_clock[1]:
		user = unit_list[0]
		keys = pygame.key.get_pressed()
		passport = False
		pos = user.position
		if keys[K_UP]: 
			pos = user.move(through(user.next(0)))
		elif keys[K_RIGHT]: 
			pos = user.move(through(user.next(1)))
		elif keys[K_DOWN]:
			pos = user.move(through(user.next(2)))
		elif keys[K_LEFT]:
			pos = user.move(through(user.next(3)))
			pass
		game_map[pos[1]][pos[0]] = '0'
		#enemy control
		u_pos = unit_list[0].position
		for index in range(1, len(unit_list)):
			enemy = unit_list[index]
			if check_gameover(u_pos, enemy.position): break
			enemy.track(u_pos)
			passport = through(enemy.next())
			enemy.move(passport)
			while not passport:
				enemy.clockwise()
				passport = through(enemy.next())
				enemy.move(passport)
			pass
		control_clock[0] = 0
		pass
	else:
		control_clock[0] += 1
		pass
	pass

#update screen
def screen_update():
	display.fill((0, 0, 0))
	for i in range(0, HEIGHT):
		for j in range(0, WIDTH):
			x = j * BLOCK_SIZE
			y = i * BLOCK_SIZE
			if game_map[i][j] == '1':
				display.blit(block_image, (x, y))
			elif game_map[i][j] == '4':
				display.blit(food_image, (x, y))
				pass
			pass
		pass
	for unit in unit_list:
		unit.update()
		x = unit.position[0] * BLOCK_SIZE
		y = unit.position[1] * BLOCK_SIZE
		display.blit(unit.image, (x, y), unit.image_rect())
	pygame.display.update()
	pass

#first
initialize()

#main loop
while True:
	system_update()
	if scene == "game":
		control_update()
		screen_update()
	else:
		gameover()
		pass
	pass

unit.py

import pygame
import math
import random

USER_IMAGE = "./material/user.png"
ENEMY_IMAGE = [("./material/enemy%d.png" % i) for i in range(1, 5)]

class unit():
	def __init__(self, filename):
		super(unit, self).__init__()
		self.image = pygame.image.load(filename)
		self.clock = [0, 5]
		self.direction = 0
		self.position = [1, 1, 1, 1]
		self.index = 0
		self.source_rect = 0
		pass

	def update(self):
		self.animation_update()
		pass

	def animation_update(self):
		self.clock[0] += 1
		if self.clock[0] > self.clock[1]:
			if self.index  4:
				self.index += 4
			else:
				self.index -= 4
			self.source_rect = self.image_rect()
			self.clock[0] = 0
			pass
		pass

	def move(self, passport):
		if passport:
			pos = self.position[:]
			self.position[0] = self.position[2]
			self.position[1] = self.position[3]
		else:
			self.position[2] = self.position[0]
			self.position[3] = self.position[1]
			pos = self.position
			pass
		return pos
		pass

	def next(self):
		self.ahead()
		return (self.position[2], self.position[3])
		pass

	def turn(self, direction):
		self.direction = direction % 4
		self.index = self.direction
		pass

	def ahead(self):
		if self.direction == 0:
			self.position[3] -= 1
		elif self.direction == 1:
			self.position[2] += 1
		elif self.direction == 2:
			self.position[3] += 1
		elif self.direction  == 3:
			self.position[2] -= 1
		pass

	def image_rect(self):
		w = self.image.get_width()
		h = self.image.get_height()
		ox = math.floor(w / 4 * (self.index % 4)) 
		oy = math.floor(h / 2 * math.floor(self.index / 4))
		return pygame.Rect((ox, oy), (24, 24))

class user(unit):
	def __init__(self, x, y):
		super(user, self).__init__(USER_IMAGE)
		self.position = [x, y, x, y]
		pass

	def next(self, direction):
		self.turn(direction)
		self.ahead()
		return (self.position[2], self.position[3])
		pass

class enemy(unit):
	def __init__(self, id, x, y):
		filename = ENEMY_IMAGE[id]
		super(enemy, self).__init__(filename)
		self.position = [x, y, x, y]
		pass

	def track(self, user_pos):
		rand_dir = [1,2,3,4]
		self.turn(random.choice(rand_dir))
		pass

	def clockwise(self):
		self.turn(self.direction + 1)
		pass

class enemy_user(unit):
	def __init__(self, x, y):
		filename = ENEMY_IMAGE[0]
		super(enemy_user, self).__init__(filename)
		self.position = [x, y, x, y]
		pass

	def move(self, x, y):
		self.position[0] = x
		self.position[1] = y
		pass

總結:

程序還有許多地方可以完善,如怪物的AI,時間的判定等等,有興趣的大佬可以加以修改完善。

完整項目下載:https://github.com/tinytsunami/Python-Game

以上就是python 實現簡單的吃豆人游戲的詳細內容,更多關于python 實現吃豆人游戲的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • Pygame做一期吃豆子游戲的示例代碼
  • js+canvas實現動態吃豆人效果
  • canvas實現繪制吃豆魚效果
  • C++實現基于控制臺界面的吃豆子游戲

標簽:畢節 股票 駐馬店 中山 衡水 江蘇 呼和浩特 湖州

巨人網絡通訊聲明:本文標題《python 實現簡單的吃豆人游戲》,本文關鍵詞  python,實現,簡單,的,吃豆人,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python 實現簡單的吃豆人游戲》相關的同類信息!
  • 本頁收集關于python 實現簡單的吃豆人游戲的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91美女精品福利| 欧美撒尿777hd撒尿| 91精品国产综合久久久蜜臀图片| 精品对白一区国产伦| 亚洲成人av免费| 国产清纯白嫩初高生在线观看91| 久久精品亚洲精品国产欧美kt∨| 亚洲国产色一区| 日产国产欧美视频一区精品| 精彩视频一区二区| 一本大道久久a久久综合| 欧美午夜精品久久久| 欧美videos中文字幕| 午夜精彩视频在线观看不卡| 福利一区在线观看| 在线一区二区三区四区五区 | 国产揄拍国内精品对白| 99re亚洲国产精品| 日韩欧美一区二区三区在线| 欧美精品第一页| 亚洲一区二区四区蜜桃| 成人禁用看黄a在线| 国产亚洲欧美一区在线观看| 韩国精品主播一区二区在线观看| 欧美日韩精品系列| 亚洲永久免费视频| 日韩一区二区视频在线观看| 亚洲国产成人av好男人在线观看| 欧美日韩一区二区在线观看| 日韩一级在线观看| 日韩成人av影视| 欧美乱熟臀69xxxxxx| 国模无码大尺度一区二区三区| 国产午夜精品在线观看| 精彩视频一区二区| 亚洲与欧洲av电影| 91丨porny丨蝌蚪视频| 国产99精品在线观看| 日韩在线一二三区| 免费av网站大全久久| 激情综合一区二区三区| 欧美日韩亚洲综合一区| 性久久久久久久| 欧美性猛片aaaaaaa做受| 日韩欧美一二区| 欧美欧美午夜aⅴ在线观看| 亚洲精品成人悠悠色影视| 国产成人免费视频网站 | 久久久亚洲欧洲日产国码αv| 色综合天天综合网国产成人综合天| 国产一区二区三区视频在线播放| 亚洲中国最大av网站| 久久精子c满五个校花| 风间由美一区二区av101| 日韩一区二区三区三四区视频在线观看 | 极品少妇xxxx精品少妇偷拍| 欧美视频一区二区在线观看| 亚洲欧美综合色| 国产精品一级片| 欧美一级在线观看| 奇米色一区二区三区四区| 亚洲欧美日韩综合aⅴ视频| 成人福利在线看| 国产精品免费免费| 白白色 亚洲乱淫| 午夜av电影一区| 国产精品视频线看| 成人精品亚洲人成在线| 国产精品天美传媒沈樵| 狠狠色狠狠色合久久伊人| 蜜桃视频一区二区| 中文字幕va一区二区三区| aa级大片欧美| 亚洲综合色噜噜狠狠| 亚洲欧美福利一区二区| 成人激情动漫在线观看| 一区二区高清免费观看影视大全 | 中文字幕电影一区| 色一情一乱一乱一91av| 亚洲日本欧美天堂| 亚洲日本在线观看| 成人av在线网站| 自拍偷在线精品自拍偷无码专区| 国产成人午夜99999| 韩日欧美一区二区三区| 久久久国产精品不卡| 成人性生交大合| 亚洲一区二区三区四区在线免费观看| 日韩欧美电影一区| jvid福利写真一区二区三区| 天天免费综合色| 久久精品一区二区三区四区| 国产香蕉久久精品综合网| 日韩 欧美一区二区三区| 国产女同性恋一区二区| 日韩一区二区三区四区五区六区| 久久久三级国产网站| 国产精品国产三级国产普通话99 | 精品福利一二区| 韩国理伦片一区二区三区在线播放| 国产精品456露脸| 秋霞电影网一区二区| 国产精品久久久久7777按摩| 欧美tk丨vk视频| 中文字幕在线视频一区| 亚洲精品一区二区三区香蕉| 欧美日韩高清在线| 欧洲一区二区三区在线| 欧美日韩中字一区| 国产精品77777| av在线免费不卡| 欧美一区二区女人| 中文字幕一区二区三区在线不卡| 亚洲国产精品久久一线不卡| 久久国产精品99精品国产| 91黄色在线观看| 国产欧美精品一区| 亚洲日本在线视频观看| 国产毛片精品一区| 色成年激情久久综合| 久久精品亚洲一区二区三区浴池| 天天色天天爱天天射综合| 99视频热这里只有精品免费| 日韩一区二区三区四区| 亚洲不卡一区二区三区| 972aa.com艺术欧美| 亚洲精品一区二区三区福利| 一区二区三区欧美久久| 91女厕偷拍女厕偷拍高清| 日韩女优av电影在线观看| 亚洲综合激情小说| 91一区二区在线| 日韩手机在线导航| 一区二区久久久久久| 成人av在线一区二区| 日韩精品专区在线影院观看| 日日夜夜免费精品| 欧美三级韩国三级日本三斤| 欧美激情自拍偷拍| 国产精品夜夜爽| 国产欧美精品在线观看| 激情综合网天天干| 欧美日韩国产一级| 亚洲精品日日夜夜| 在线中文字幕一区二区| 国产精品美女一区二区在线观看| 黄色小说综合网站| 日韩区在线观看| 亚洲综合在线第一页| 99久久免费精品| 亚洲精选免费视频| av中文字幕亚洲| 亚洲青青青在线视频| 91视频国产资源| 亚洲一区二区影院| 一本在线高清不卡dvd| 亚洲婷婷综合色高清在线| 国产黄色精品视频| 国产精品视频一二三区| 国产成人在线网站| 欧美国产日韩一二三区| www.亚洲免费av| 亚洲理论在线观看| 欧美午夜精品免费| 美腿丝袜亚洲色图| 久久免费午夜影院| eeuss鲁片一区二区三区| 中文一区一区三区高中清不卡| 国产乱人伦偷精品视频不卡| 国产喂奶挤奶一区二区三区| 国产在线精品一区二区夜色| 精品国产免费一区二区三区香蕉| 精品中文av资源站在线观看| 国产色婷婷亚洲99精品小说| 日本乱人伦一区| 人人狠狠综合久久亚洲| 欧美日韩mp4| 视频一区免费在线观看| 制服丝袜亚洲播放| 国产精品一二一区| 亚洲视频一二三| 日韩女优制服丝袜电影| 久久精品72免费观看| 亚洲少妇30p| 在线观看91av| 99免费精品视频| 视频一区二区不卡| 国产精品卡一卡二卡三| 色综合久久久久久久| 久久精品国产澳门| 亚洲国产另类av| 亚洲欧美日韩中文字幕一区二区三区| 日韩欧美国产系列| 欧美视频在线一区| 99久久精品99国产精品| 国内精品伊人久久久久av一坑 | 欧美群妇大交群中文字幕| 国产乱一区二区| 久久99在线观看| 视频一区欧美精品|