1. 程式人生 > >HTML5+JS遊戲開發模組----canvas打字遊戲

HTML5+JS遊戲開發模組----canvas打字遊戲

原本要繼續研究塔防遊戲,但發現尋路演算法搞不定,其實演算法壓根看不懂,看的頭暈,炮塔自動追蹤移動物體也搞不定,塔防專案得延遲了。所以,就搞了另外一個遊戲,鍵盤打字母遊戲,老樣子,因為初學javascript,程式碼比較亂,見諒。

遊戲難點:

1.字母初始化

2.一個字母消失後,自動補充一個

3.字母運動

想必大家也看出來了,遊戲比較簡單,直接開始js部分。

字母類

//字母類
				function Word(){
					this.x=[];
					this.y=[];
					this.aLive=[];
					this.spd=[];
					this.larr=[];//繪製所需陣列
					this.color=[];
					this.xColor;//選擇顏色
					this.letters=[];//字母集合陣列
				}
				Word.prototype.sum=5;//螢幕中最多有50個字母
				Word.prototype.init=function(){
					this.letters=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
					this.color=['yellow','red','blue','green'];
					for(var i=0;i<this.sum;i++){
						this.aLive[i]=true;
						this.x[i]=600;
						this.y[i]=Math.floor(Math.random()*400)+100;
						if(this.y[i]>600){
							this.y[i]=0;
						}
						if(i>=1){
							if(this.y[i]-this.y[i-1]<30){
								this.y[i]=this.y[i-1]+41;
							}
						}
						var arrL=this.letters[Math.floor(Math.random()*48)];//隨機排序
						this.larr.push(arrL);
						this.spd[i]=Math.random()*0.017+0.003;//速度區間在[0.01-0.015)
					}
				}
				Word.prototype.draw=function(){
					for(var i=0;i<this.sum;i++){
						if(this.aLive[i]){
							this.x[i]-=this.spd[i]*5*deltaTime;
							ctx.save();
							//設定字型樣式
						    ctx.font = "50px Courier New";
						    //設定字型填充顏色
						    ctx.fillStyle =''+this.color[this.xColor]+'';
						    //從座標點(50,50)開始繪製文字
						    ctx.fillText(this.larr[i], this.x[i], this.y[i]);
							ctx.restore();
							if(this.x[i]<=0){//邊界消失
								this.born(i);
							}
						}	
					}	
				}
				//自動生成一個字母
				Word.prototype.born=function(i){
					this.aLive[i]=false;//字母消失
					this.x[i]=600;
					this.y[i]=Math.floor(Math.random()*400)+100;
					if(this.y[i]>600){
						this.y[i]=0;
					}
					this.larr.splice(i,1,this.letters[Math.floor(Math.random()*48)]);//刪除陣列對應字母,並在原位置插入,確保順序
					this.aLive[i]=true;//字母重新生成
				}
上面類屬性基本上都是採用陣列方式,為什麼呢?因為字母有多個,多個物體運動必須有多個物體座標,速度等,字母觸碰邊界消失,按鍵觸發消失,以上程式碼有詳細註釋,不多說了。

接下來就是遊戲必不可少的滑鼠事件,按鍵事件

//按鍵事件
				keysDown={};//儲存按鍵事件
				window.addEventListener('keydown',function(e){
					keysDown[e.keyCode]=true;
					e=event||window.event;
					for(var i=0;i<sum;i++){
						if(String.fromCharCode(e.keyCode)==word.larr[i].toLocaleUpperCase()){//將字母全部轉換為大寫字母在比較
							word.born(i);//刪除陣列對應字母
						}	
					}
				},false);

				window.addEventListener('keyup',function(e){
					delete keysDown[e.keyCode];
				},false);
				//滑鼠事件
				window.addEventListener('mousemove',function(e){
					if(e.offSetX||e.layerX){//相容性寫法
						//三元運算子
						mx=e.offSetX==undefined?e.layerX:e.offSetX;
						my=e.offSetY==undefined?e.layerY:e.layerY;
					}
					ctx.save();
					ctx.font = "12px Courier New";
					ctx.fillStyle =''+fcolor+'';
					if(mx>708&&mx<730&&my>120&&my<130){
						canvas.style.cursor='pointer';
						ctx.fillText('黃色',708,130);
					}
					else if(mx>748&&mx<770&&my>120&&my<130){
						canvas.style.cursor='pointer';
						ctx.fillText('紅色',748,130);
					}
					else if(mx>708&&mx<730&&my>160&&my<170){
						canvas.style.cursor='pointer';
						ctx.fillText('藍色',708,170);
					}
					else if(mx>748&&mx<770&&my>160&&my<170){
						canvas.style.cursor='pointer';
						ctx.fillText('綠色',748,170);
					}
					else{
						canvas.style.cursor='default';
						ctx.beginPath();
						//設定字型樣式
					    ctx.font = "12px Courier New";
					    //設定字型填充顏色
					    ctx.fillStyle ='blue';
					    //從座標點(50,50)開始繪製文字
					    ctx.fillText('請選擇字母顏色',708,100);
					    ctx.fillText('黃色',708,130);
					    ctx.fillText('紅色',748,130);
					    ctx.fillText('藍色',708,170);
					    ctx.fillText('綠色',748,170);
						ctx.closePath();
					}
					ctx.restore();
				},false);
				//滑鼠點選
				window.addEventListener('click',function(e){
					if(e.offSetX||e.layerX){//相容性寫法
						//三元運算子
						mx=e.offSetX==undefined?e.layerX:e.offSetX;
						my=e.offSetY==undefined?e.layerY:e.layerY;
					}
					if(mx>708&&mx<730&&my>120&&my<130){
						xColor=0;
					}
					else if(mx>748&&mx<770&&my>120&&my<130){
						xColor=1;
					}
					else if(mx>708&&mx<730&&my>160&&my<170){
						xColor=2;
					}
					else if(mx>748&&mx<770&&my>160&&my<170){
						xColor=3;
					}
				},false);
採用addEventListener事件繫結,這樣做好處就是響應更加緊湊,而且可以實現(玩家)斜著運動,這裡用來繫結滑鼠移動,滑鼠點選,鍵盤事件。滑鼠移動事件主要是為了字母顏色選擇時候,字型變色(類似滑鼠經過效果),滑鼠點選事件就是增加響應顏色屬性,改變字母顏色。鍵盤事件主要用到String.fromCharCode(e.keyCode)返回按鍵字串,當然是大寫的,所以判斷時候,要將畫布上字母進行大寫轉換word.larr[i].toLocaleUpperCase(),否則小寫字母,不會消失。

字母繪製,文字繪製

//設定字型樣式
			    ctx.font = "12px Courier New";
			    //設定字型填充顏色
			    ctx.fillStyle ='blue';
			    //從座標點(50,50)開始繪製文字
			    ctx.fillText('請選擇字母顏色',708,100);

第一個是字型大小,字型填充顏色(也可以是描邊stroke),填充文字fillText。

接下來的不過就是不斷迴圈重新整理畫布,讓字母運動,這裡不再多說,感覺我也說不清楚。大家有興趣可以去 慕課網 找 愛心魚遊戲視訊教程看看,裡面有專門講解。

完整程式碼

相關推薦

HTML5+JS遊戲開發模組----canvas打字遊戲

原本要繼續研究塔防遊戲,但發現尋路演算法搞不定,其實演算法壓根看不懂,看的頭暈,炮塔自動追蹤移動物體也搞不定,塔防專案得延遲了。所以,就搞了另外一個遊戲,鍵盤打字母遊戲,老樣子,因為初學javascript,程式碼比較亂,見諒。 遊戲難點: 1.字母初始化 2.一個字母消失

HTML5+JS遊戲開發模組----發射多顆子彈

現在開始射擊遊戲中發射子彈模組,說實話,這是我上網查詢資源自學後,自己搗鼓的。由於興趣支撐,由於缺乏正規教程,而我又沒有錢培訓,基礎不好也不敢冒險培訓。所以,程式碼很初級,更多是為了實現某種目的,按鍵處理這塊處理很不友好,不喜勿噴! 趁著還有點熱愛,趕緊發發文章,避免一事

使用linux curses開發控制檯的打字遊戲

1. 關於linux curses庫,不多說,google下便知道,就像當年的TC下的視窗程式庫一樣  2.  事情源於在chinaunix上看到了the4king在c/c++論壇上的帖子: 程式碼的編譯命令是: #  gcc file.c  -lrt -lcurses

如何用Cocos2d-JS快速開發一個微信遊戲《來自喵星的你》

今天我們來介紹一下如何使用Cocos2d-JS引擎快速開發一個微信遊戲《來自喵星的你》 1.Cocos2d-JS引擎 Cocos2d-JS引擎是Cocos2d-x的JS版本,它極大簡化與整合的API設計使得遊戲開發變得前所未有地輕鬆。依託Web平臺使C

遊戲開發】淺談遊戲開發中常見的設計原則

依賴關系 unity 說過 srp des log gof https 類繼承   俗話說得好:“設計模式,常讀常新~”。的確,每讀一遍設計模式都會有些新的體會和收獲。馬三不才,才讀了兩遍設計模式(還有一遍是在學校學的),屬於菜鳥級別的。這次準備把閱

棋牌遊戲開發,網絡遊戲開發遊戲開發小能手,遊戲APP開發,創業項目

logs style 電腦 應該 一個用戶 科技 麻將 小時 朋友 隨著生活節奏的加快和工作壓力的不時增加。越來越多的人處於工作、家庭、社會等各個方面壓力的夾層中,於是各種各樣的減壓方法湧現出來,玩遊戲早已經成為人們休閑娛樂的最佳選擇,但是遊戲的種類數不勝數,這也讓很多人絞

遊戲開發】免費開源遊戲引擎

開源即開放原始碼(Open Source),遊戲引擎好比賽車的引擎,是用於控制所有遊戲功能的主程式,從計算碰撞、物理加速系統和物體的相對位置,到接受玩家的輸入,以及按照正確的音量輸出聲音等等。無論是角色扮演遊戲、即時策略遊戲、冒險解謎遊戲或是動作射擊遊戲,哪怕是一個只有1兆的小遊戲,都有這樣一段起控

unity遊戲開發入門-聲音控制遊戲

聲音控制遊戲中人物的移動,關鍵在於聲音的傳入,這裡關機鍵在於使用了Microphone 怎麼使用呢?下面給一段我編寫的聲音傳入的程式碼:(關鍵處已被標識) using System.Collections; using System.Collections.Ge

win32遊戲開發(2) --連連看遊戲製作(vc++版)

工程目錄一覽 檔案功能及關係圖: GameEngine類 成員名 作用 static GameEngine * m_pGameEngine 指向自身的指標,供外界程式訪問 HINSTANCE m_hInstance 例項控制

cocos creator JavaScript微信小遊戲開發問題筆記:遊戲在瀏覽器和微信開發工具的模擬器上執行都沒有問題,但手機上執行卻會都別卡。

最近專案組在開發一款執行在微信小遊戲環境的鬥地主遊戲,專案的第一個版本收尾階段突然出現了一個奇怪的bug,因為之前開發階段的測試都是在瀏覽器以及微信開發工具上的模擬器進行的測試,所以直到臨近專案上線才發現這個問題,具體表現如下:遊戲執行在手機上會特別卡,並且卡一段時間、或者卡

【Visual C 】遊戲開發筆記十二 遊戲輸入訊息處理 一 鍵盤訊息處理

                ------------------------------------------------------------------------------------------------------------------------------淺墨歷時一年為遊戲程式設計

【Visual C++】遊戲開發筆記十四 遊戲畫面繪圖 四 華麗的CImage類

詳細註釋的原始碼如下#include "stdafx.h"  #include "atlimage.h"//全域性變數宣告  HINSTANCE hInst;  HBITMAP bg;        //宣告一個位圖物件,用於儲存背景圖  HDC  mdc;        //宣告一個記憶體DC"mdc",用

python:pygame小遊戲(三)—— 打字遊戲

   程式碼一:實現字元下落的基本功能 """ 打字遊戲 1. 宣告列表word、xx(x座標值)、yy(y座標值) 2. 建立init()函式,初始化三個列表 3. 第四部分:paint ===>繪製字元 4. 第三部分:action ===>進行字母移動 5.

Unity3D遊戲開發——塔防小遊戲

遊戲效果圖: 本文參照siki學院的塔防遊戲教程寫的。http://www.sikiedu.com,搜尋塔防遊戲登入即可觀看。 遊戲流程: 1.首先建立cube調整其大小(以便計算),然後將其設成預

【Visual C++】遊戲開發筆記之四——遊戲畫面繪圖(一)基本圖形繪製

毛星雲,網路ID「淺墨」,90後,熱愛遊戲開發、遊戲引擎、計算機圖形、實時渲染等技術,就職於騰訊互娛。 微軟最有價值專家 著作《Windows遊戲程式設計之從零開始》、《OpenCV3程式設計入門》 碩士就讀於南京航空航天大學航天學院(2013級碩士研究生),已於2016年三月畢業。本科

【程式設計師的遊戲開發之路】 遊戲架構

啊啊啊啊今天去面了鵝廠,結果在實習公司Unity用得太多了,好多基礎都忘得差不多了,看起來要撿起來好好再學習一下O(∩_∩)O莫要放棄,就從遊戲架構開始學起哈。 參考的書是《 遊戲程式設計權威指南 》 遊戲整體架構 總體來說,遊戲中的所有子系統屬於以下

CanvasHTML5遊戲開發的基本流程+P2.js物理引擎實戰開發

《HTML5遊戲開發的基本流程》 * 1. HTML5的簡述 * 2. HTML5遊戲開發所需的環境與工具 * 2.1. 開發環境 * 2.1.1. 瀏覽器 * 2.1.2. 開發語言 *

網頁HTML5--飛機大戰小遊戲開發--canvas的應用

一,概述 此小專案,是用來練習HTML5的canvas的程式設計運用。在這個專案中,我們需要建立一個可執行的網頁小遊戲,開發此小遊戲並不難,大概如下圖所示: 在整個遊戲的執行中,總共要分為5個狀態(state)去實現,分別是首頁(START),載入中(STARTING)

如何開發一個簡單的HTML5 Canvas遊戲

想要快速上手HTML5 Canvas小遊戲開發?下面通過一個例子來進行手把手教學。(如果你懷疑我的資歷, A Wizard's Lizard這個遊戲的半數以上開發是由我完成的) 我們直接來看原始碼裡的game.js,當然你也可以線上體驗一下游戲先。 遊戲截圖 建立畫布 // Create the can

HTML5 canvas遊戲開發實戰 5 : 石頭剪刀布

5.1 遊戲分析       遊戲畫面 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <script type="text/javascript" sr