發(fā)布時間:2023-11-27 14:29:33 瀏覽量:118次
為了減小篇幅,我計劃分2-3篇來寫,不足之處,歡迎指正。
在這里,我教大家如何實現(xiàn)一個簡單的迷宮游戲。這個迷宮很簡單,但可以玩。最終效果如下圖所示。
初始界面
挑戰(zhàn)成功界面
這是我?guī)啄昵皩懙挠螒?,代碼可能寫的不是很好,當時用的語言是typescript,改成JS版很容易。
我是用畫布實現(xiàn)的,要實現(xiàn)這個游戲,主要需要這些步驟:
我們需要根據(jù)視口寬度,行數(shù)和列數(shù),以及墻的厚度來生成迷宮。我們需要根據(jù)設備像素比來更新畫布的寬和高,并計算路的寬度。在這里,我將路稱為單元格。
private updateSize (options: UiOptions = {}) {
this.cols = options.cols || this.cols || 16
const width = this.cvs.offsetWidth * this.pixRatio
const maxWallWidth = width / (this.cols * 2 + 1)
const wallWidth = Math.min(maxWallWidth, options.wallWidth || this.pixRatio * 5)
const cellWidth = (width - (this.cols + 1) * wallWidth) / this.cols
const maxHeight = (this.cvs.parentElement?.offsetHeight as number) * this.pixRatio
const maxRows = Math.floor((maxHeight - wallWidth) / (cellWidth + wallWidth))
this.rows = Math.min(maxRows, options.rows || this.cols)
this.realRows = this.rows * 2 - 1
this.realCols = this.cols * 2 - 1
this.cellWidth = cellWidth
this.wallWidth = wallWidth
this.cvs.width = this.gameCvs.width = width
this.cvs.height = this.gameCvs.height = this.rows * (cellWidth + wallWidth) + wallWidth
}
我們需要根據(jù)行數(shù)和列數(shù),生成一個初始的網(wǎng)格,這個網(wǎng)格是一個二維數(shù)組,包含:墻和單元格。我們需要一個標識,來確定格子的類型。
private genGrid () {
const grid: Block[][] = []
const { realRows, realCols } = this
for (let row = 0; row < realRows; row++) {
grid[row] = []
for (let col = 0; col < realCols; col++) {
grid[row][col] = {
row,
col,
type: row % 2 || col % 2 ? BlockType.WALL : BlockType.CELL
}
}
}
return grid
}
有了尺寸和網(wǎng)格,我們還需要生成入口和出口位置。這個位置是根據(jù)列數(shù),以及單元格和墻的寬度,隨機生成的。代碼如下:
private getStartPoint () {
const col = getRandInt(0, this.cols - 1)
const { cellWidth, wallWidth } = this
return {
x: (cellWidth + wallWidth) * (col + 1 / 2),
y: wallWidth + cellWidth / 2 - this.pixRatio / 2
}
}
private getEndPoint () {
const col = getRandInt(0, this.cols - 1)
const { cellWidth, wallWidth } = this
return {
x: (cellWidth + wallWidth) * col + wallWidth / 2,
y: this.cvs.height - this.wallWidth
}
}
在迷宮圖中,我們的可移動目標是一個圓形物體。需要給它一個初始位置,這個位置就是入口。還需要提供一個半徑,用于繪制,這個圓的直徑必須小于單元格寬度。
this.ball = { ...this.startPoint, r: this.cellWidth * .32 }
感謝閱讀!以上就是本篇文章的全部內容,童鞋們都看懂了嗎?下篇文章,我將給大家講解迷宮圖的生成,以及怎樣在迷宮中移動目標,還會涉及到碰撞檢測等。
#頭條創(chuàng)作挑戰(zhàn)賽# #前端##程序員#
熱門資訊
探討游戲引擎的文章,介紹了10款游戲引擎及其代表作品,涵蓋了RAGE Engine、Naughty Dog Game Engine、The Dead Engine、Cry Engine、Avalanche Engine、Anvil Engine、IW Engine、Frostbite Engine、Creation引擎、Unreal Engine等引擎。借此分析引出了游戲設計領域和數(shù)字藝術教育的重要性,歡迎點擊咨詢報名。
2. 手機游戲如何開發(fā)(如何制作傳奇手游,都需要準備些什么?)
?如何制作傳奇手游,都需要準備些什么?提到傳奇手游相信大家都不陌生,他是許多80、90后的回憶;從起初的端游到現(xiàn)在的手游,說明時代在進步游戲在更新,更趨于方便化移動化。而如果我們想要制作一款傳奇手游的
3. B站視頻剪輯軟件「必剪」:免費、炫酷特效,小白必備工具
B站視頻剪輯軟件「必剪」,完全免費、一鍵制作炫酷特效,適合新手小白。快來試試!
游戲中玩家將面臨武俠人生的掙扎抉擇,戰(zhàn)或降?殺或放?每個抉定都將觸發(fā)更多愛恨糾葛的精彩奇遇?!短烀嬗肪哂卸嗑€劇情多結局,不限主線發(fā)展,高自由...
5. Bigtime加密游戲經(jīng)濟體系揭秘,不同玩家角色的經(jīng)濟活動
Bigtime加密游戲經(jīng)濟模型分析,探討游戲經(jīng)濟特點,幫助玩家更全面了解這款GameFi產(chǎn)品。
6. 3D動畫軟件你知道幾個?3ds Max、Blender、Maya、Houdini大比拼
當提到3D動畫軟件或動畫工具時,指的是數(shù)字內容創(chuàng)建工具。它是用于造型、建模以及繪制3D美術動畫的軟件程序。但是,在3D動畫軟件中還包含了其他類型的...
7. 3D動漫建模全過程,不是一般人能學的會的,會的多不是人?
步驟01:面部,頸部,身體在一起這次我不準備設計圖片,我從雕刻進入。這一次,它將是一種純粹關注建模而非整體繪畫的形式。像往常一樣,我從Sphere創(chuàng)建它...
8. 如何自己開發(fā)一款游戲(游戲開發(fā)入門必看:五大獨立游戲開發(fā)技巧)
?游戲開發(fā)入門必看:五大獨立游戲開發(fā)技巧無論您是剛剛起步開發(fā)自己的第一款游戲,還是已經(jīng)制作了幾款游戲,本篇文章中的5大獨立游戲開發(fā)技巧都可以幫助您更好地設計下一款游戲。無論你對游戲有著什么樣的概念,都
?三昧動漫對于著名ARPG游戲《巫師》系列,最近CD Projekt 的高層回應并不會推出《巫師4》。因為《巫師》系列在策劃的時候一直定位在“三部曲”的故事框架,所以在游戲的出品上不可能出現(xiàn)《巫師4》
想讓你的3D打印模型更堅固?不妨嘗試一下Cura參數(shù)設置和設計技巧,讓你輕松掌握!
同學您好!