游戲葡萄原創專稿,未經允許請勿轉載
昨天下午2點,觸控科技CEO陳昊芝發布了一條帶鏈接的微博:“終于可以做到點幾下鼠標就可以做一個游戲了”。根據文字下方的配圖,看得出是一款名為“Game Creator Online”的在線微博/微信小游戲開發工具。
根據網站說明,這套開發工具采用了Cocos2d-JS技術,制作者登陸頁面后,可在線制作H5游戲。同時,還集成了廣告、推廣、免費資源、一鍵發布等功能。
這套工具內置了5個游戲模版,分別為眼力大挑戰、美女變恐龍、來自喵星的你、像素小鳥(Flappy Bird)、你是我的小羊駝。普通玩家只需上傳圖片和音樂就可將游戲模板改造為自己想要的游戲。有技術基礎的制作者則可以通過編輯代碼,撤換素材來對游戲的細節進行調整。
葡萄君進行了嘗試,隨意挑了一個游戲icon,花費了五分鐘,做出了一個,呃,毫無誠意的換皮版FlappyBird。
游戲制作完成后,可自動生成網址和二維碼,還能打包下載APK包。制作者既可以自行發布游戲作品,也可以向觸控提交自己的作品。
網站提供了18個作品推薦位,點擊后進入游戲的展示頁面。玩家可用鼠標代替手指進行試玩。目前所發布的游戲絕大多數都是Flappy Bird換皮作品。
觸控并非這一模式的先行者,相較而言,以制作文字冒險游戲為主的橙光游戲在UGC的路上走得更遠,目前來看,這套工具的模板和素材還比較單一,制作者之間也缺乏互動。
這還只是一個簡單的小玩意,除了“看起來還挺有意思”,我們暫時無法做出其他的評價。它唯一的作用是讓制作一款熱門翻皮小游戲變得前所未有地簡單了,不過很有可能觸控將不斷推出新的游戲模板,并開放更高自由度的游戲編輯功能,對于一向“野心”的觸控來說,我們不排除一些未來的可能性。
期我們將制作一個仿“FlappyBird”的小游戲。
讓我們愉快地開始吧~
安裝Python并添加到環境變量,pip安裝需要的相關模塊即可。
玩家通過空格鍵控制一只小鳥,使其跨越由各種不同長度水管所組成的障礙物,當小鳥碰撞到障礙物或跌至屏幕最底端時,游戲結束。
Step1:定義精靈類
為了方便實現小鳥和水管之間碰撞的檢測,我們先定義一些精靈類,包括:
隨著游戲時間的推移,小鳥應當具有更新自身位置的能力,即當玩家按下空格鍵時,小鳥向上跳躍,否則小鳥向下墜落。另外,為了使游戲場景更加真實,小鳥在向上跳躍或者向下墜落之前,應當先調整身體角度。具體代碼實現如下:
② 管道類
管道分為管道體和管道頭。管道頭:
管道體:
可先簡單定義如下:
顯然,一個管道頭和若干個管道體組成了一個管道障礙物,管道障礙物兩兩同列,兩者之間留有一定的空間供小鳥穿過,就像這樣:
因此,我們定義一個大的管道類,以便構建一個完整的管道障礙物,代碼實現如下:
其中,更新管道的作用為通過管道的左移來實現小鳥不斷右移的效果。
** Step2:實現游戲主循環**
先初始化,載入圖片、音樂、字體等文件,并定義一些必要的常量:
現在就可以開始定義游戲主循環了!游戲主循環的邏輯十分簡單,先顯示游戲背景,然后根據玩家的操作更新小鳥位置,自動更新管道位置,并通過碰撞檢測以及小鳥的縱坐標來判斷游戲是否結束,若游戲結束,則顯示游戲結束畫面。當然你也需要根據玩家通過的管道數量來實時更新玩家當前的分數,這一步需寫在最后,否則分數會被管道所遮蓋,這顯然是不合理的,具體實現如下:
文章到這里就結束了,感謝你的觀看~我準備了Python24個小游戲系列,下篇文章仿Google小恐龍
為了感謝讀者們,我想把我最近收藏的一些編程干貨分享給大家,回饋每一個讀者,希望能幫到你們。
干貨主要有:
① 2000多本Python電子書(主流和經典的書籍應該都有了)
② Python標準庫資料(最全中文版)
③ 項目源碼(四五十個有趣且經典的練手項目及源碼)
④ Python基礎入門、爬蟲、web開發、大數據分析方面的視頻(適合小白學習)
⑤ Python學習路線圖(告別不入流的學習)
⑥ 兩天的Python爬蟲訓練營直播權限
紹:
強化學習在游戲領域中有著廣泛的應用,可以幫助智能體學習最優的行動策略。在本教程中,我們將使用PyTorch構建一個強化學習智能體,讓它學會玩Flappy Bird游戲。我們將使用深度Q網絡(DQN)作為我們的強化學習模型,通過與游戲環境的交互來訓練智能體。
步驟1:安裝游戲環境和必要的庫
首先,我們需要安裝Python游戲庫pygame,以及用于強化學習的PyTorch庫。
pip install pygame torch torchvision
步驟2:構建游戲環境
我們將使用Pygame庫來構建Flappy Bird游戲的環境。
import pygame
import random
# 初始化游戲
pygame.init()
# 設置游戲窗口尺寸
WIDTH, HEIGHT=288, 512
win=pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Flappy Bird")
# 加載游戲資源
bg=pygame.image.load("bg.png")
bird=pygame.image.load("bird.png")
pipe_img=pygame.image.load("pipe.png")
base_img=pygame.image.load("base.png")
# 定義游戲參數
bird_x=50
bird_y=HEIGHT // 2
bird_speed=0
gravity=0.25
jump=-4.5
pipe_speed=3
# 游戲循環
running=True
while running:
for event in pygame.event.get():
if event.type==pygame.QUIT:
running=False
win.blit(bg, (0, 0))
win.blit(bird, (bird_x, bird_y))
# 更新小鳥位置
bird_speed +=gravity
bird_y +=bird_speed
pygame.display.update()
pygame.quit()
步驟3:構建強化學習智能體
接下來,我們將構建一個深度Q網絡(DQN)作為我們的強化學習智能體,用于學習游戲中的最佳行為策略。
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
# 定義深度Q網絡
class DQN(nn.Module):
def __init__(self):
super(DQN, self).__init__()
self.conv=nn.Sequential(
nn.Conv2d(3, 32, kernel_size=8, stride=4),
nn.ReLU(),
nn.Conv2d(32, 64, kernel_size=4, stride=2),
nn.ReLU(),
nn.Conv2d(64, 64, kernel_size=3, stride=1),
nn.ReLU()
)
self.fc=nn.Sequential(
nn.Linear(3136, 512),
nn.ReLU(),
nn.Linear(512, 2)
)
def forward(self, x):
x=self.conv(x)
x=x.view(x.size(0), -1)
x=self.fc(x)
return x
# 定義訓練函數
def train(model, memory, optimizer, criterion, batch_size):
if len(memory) < batch_size:
return
transitions=memory.sample(batch_size)
batch=Transition(*zip(*transitions))
state_batch=torch.cat(batch.state)
action_batch=torch.cat(batch.action)
reward_batch=torch.cat(batch.reward)
next_state_batch=torch.cat(batch.next_state)
state_action_values=model(state_batch).gather(1, action_batch)
next_state_values=torch.zeros(batch_size)
non_final_mask=torch.tensor(tuple(map(lambda s: s is not None, batch.next_state)), dtype=torch.bool)
non_final_next_states=torch.cat([s for s in batch.next_state if s is not None])
next_state_values[non_final_mask]=model(non_final_next_states).max(1)[0].detach()
expected_state_action_values=(next_state_values * GAMMA) + reward_batch
loss=criterion(state_action_values, expected_state_action_values.unsqueeze(1))
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 定義智能體參數
BATCH_SIZE=128
GAMMA=0.999
EPS_START=0.9
EPS_END=0.05
EPS_DECAY=200
TARGET_UPDATE=10
N_ACTIONS=2
N_STATES=3136
# 初始化深度Q網絡、優化器和損失函數
policy_net=DQN()
target_net=DQN()
target_net.load_state_dict(policy_net.state_dict())
target_net.eval()
optimizer=optim.RMSprop(policy_net.parameters())
criterion=nn.SmoothL1Loss()
# 定義經驗回放類
class ReplayMemory(object):
def __init__(self, capacity):
self.capacity=capacity
self.memory=[]
self.position=0
def push(self, *args):
if len(self.memory) < self.capacity:
self.memory.append(None)
self.memory[self.position]=Transition(*args)
self.position=(self.position + 1) % self.capacity
def sample(self, batch_size):
return random.sample(self.memory, batch_size)
def __len__(self):
return len(self.memory)
# 初始化經驗回放
memory=ReplayMemory(10000)
# 定義狀態轉換類
Transition=namedtuple('Transition', ('state', 'action', 'next_state', 'reward'))
# 訓練智能體
for episode in range(num_episodes):
state=env.reset()
for t in count():
action=select_action(state)
next_state, reward, done, _=env.step(action.item())
reward=torch.tensor([reward], device=device)
memory.push(state, action, next_state, reward)
state=next_state
train(policy_net, memory, optimizer, criterion, BATCH_SIZE)
if done:
break
if episode % TARGET_UPDATE==0:
target_net.load_state_dict(policy_net.state_dict())
步驟4:評估智能體
最后,我們可以評估我們訓練的智能體在游戲中的性能。
def evaluate():
rewards=[]
for _ in range(10):
state=env.reset()
total_reward=0
for _ in range(500):
action=policy_net(state).max(1)[1].view(1, 1)
state, reward, done, _=env.step(action.item())
total_reward +=reward
if done:
break
rewards.append(total_reward)
return np.mean(rewards)
print("Average reward:", evaluate())
這樣,我們就完成了一個基于PyTorch的強化學習智能體來玩Flappy Bird游戲的項目實戰。
總結:
本教程中,我們使用PyTorch構建了一個強化學習智能體,讓它學會玩Flappy Bird游戲。我們從構建游戲環境開始,然后實現了深度Q網絡作為我們的強化學習模型,并使用經驗回放來訓練智能體。最后,我們評估了智能體在游戲中的性能。