Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
又在別的地方嫖到了這個效果研究了億下下,制作過程如下(超詳細):
<canvas id="canvas"></canvas>
#canvas{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
box-shadow: 0 0 10px rgb(150, 150, 150);
}
position: absolute; 絕對定位。
top: 50%;
left: 50%;
transform: translate(-50%,-50%); 居中。
box-shadow: 0 0 10px rgb(150, 150, 150); 陰影。
var canvas = document.querySelector("#canvas");
var ctx = canvas.getContext('2d');
//畫布寬
var wide=600;
//畫布高
var high=600;
// 變量,判斷一次渲染中只識別按鍵一次
var kd = 0;
//當前分數
var fraction =0;
//速度,就是執行定時器的時間參數
var speed = 250;
// 蛇的初始顏色 紅色
var yanse = `red`;
// 蛇數組,組成蛇的每一個方塊
var snake = [];
// 食物數組
var food = {};
// 蛇的移動方向,x軸:1為向右,-1為向左;y軸:1為向下,-1為向上 。不能斜著走,所以0為某軸無方向。
var diretion = {
x:-1,
y:0
}
// 給畫布寬高賦值 打算畫一個長寬都是30個20px的方塊畫布
canvas.width = wide;
canvas.height = high;
function chushi(){
//蛇初始長度為3個方塊,位置如下(這個隨意)
for(let i =0;i<3;i++){
snake.push({
x: i+10,
y: 10
})
}
// 給食物一個隨機位置和隨機顏色
food = {
x: parseInt(Math.random()*30),
y: parseInt(Math.random()*30),
color:`rgb(${Math.random()*255},${Math.random()*255},${Math.random()*255})`
}
}
// 繪制圖形
function draw(){
// 繪制顯示當前分數的文字
ctx.fillStyle = 'rgba(255,255,255,0.5)';
ctx.font="50px 仿宋";
ctx.textAlign = 'center';
ctx.fillText("你的分數為:"+fraction+" 分",300,300);
// 繪制方格,長寬都是30個,都是19px*19px的方格
for(let i=0;i<30;i++){
for(let j=0;j<30;j++){
ctx.fillStyle = 'rgba(255, 255, 255,.3)';
ctx.fillRect(i*20,j*20,19,19);
}
}
// 繪制蛇
for(let i=0;i<snake.length;i++){
temp = snake[i];
ctx.fillStyle = yanse;
ctx.fillRect(temp.x*20,temp.y*20,19,19);
// 判斷蛇頭(第一個方塊)是否與身體某個方塊重合 ,就是頭撞到身體
if(temp.x==snake[0].x&&temp.y==snake[0].y&&i!=0){
// 游戲結束,重新給初始化
alert('游戲結束~點擊確認再來一次~');
fraction = 0;
snake.length=0;
chushi();
}
}
// 繪制食物,繪制一個圓形
ctx.beginPath();
ctx.fillStyle = food.color;
ctx.arc(food.x*20+9.5,food.y*20+9.5,7,0,Math.PI*2,false);
ctx.stroke();
ctx.fill();
ctx.closePath();
// 給蛇頭繪制一個字符,☆ ,好區分頭尾 ,也可省略
ctx.fillStyle = 'yellow';
ctx.font="15px 仿宋";
ctx.textAlign = "start";
ctx.fillText("☆",snake[0].x*20+2,snake[0].y*20+14.5);
}
//更新
function update(){
// 建一個對象head,這個為蛇的新頭,通過繪制新頭,去掉尾部實現移動效果
var head = {};
//判斷蛇頭是否遇到邊界,到邊界則在另一邊重新繪制 x軸
switch (snake[0].x+diretion.x){
case -1: head.x=29;break;
case 30: head.x=0;break;
// 沒到邊界則為當前位置加方向
default: head.x = snake[0].x+diretion.x;
}
//判斷蛇頭是否遇到邊界,到邊界則在另一邊重新繪制 y軸
switch (snake[0].y+diretion.y){
case -1: head.y=29;break;
case 30: head.y=0;break;
// 沒到邊界則為當前位置加方向
default: head.y = snake[0].y+diretion.y;
}
// 判斷新蛇頭是否與食物重合,就是吃到食物
if(head.x==food.x&&head.y==food.y){
//蛇的顏色為吃到食物的顏色
yanse = food.color;
// 重新給食物初始化
food = {
x: parseInt(Math.random()*30),
y: parseInt(Math.random()*30),
color:`rgb(${Math.random()*255},${Math.random()*255},${Math.random()*255})`
}
//在蛇尾添加一節
let temp = snake[length-1];
snake.push(temp);
fraction+=1;
// 吃完食物速度加快
if(speed>80){
//定時器間隔減10
speed = speed-10;
// 清除原來定時器,重新繪制
clearInterval(time);
time = setInterval(function () {
kd = 0;
ctx.clearRect(0, 0, wide, high);
update();
draw();
}, speed);
}
}
//添加新頭
snake.splice(0,0,head);
//去掉尾部
snake.pop();
}
//判斷點擊事件
document.addEventListener('keydown', event=>{
switch (event.keyCode){
// 按了向上鍵
case 38:
// 判斷當前不是向下移動與還沒按過鍵,否則蛇會重疊
if(diretion.y!=1&&kd==0){
// 重新給移動方向賦值
diretion.x=0;
diretion.y=-1;
kd=1;
}
break;
// 下面以此類推一樣的原理
case 39:
if(diretion.x!=-1&&kd==0){
diretion.x=1;
diretion.y=0;
kd=1;
}
break;
case 40:
if(diretion.y!=-1&&kd==0){
diretion.x=0;
diretion.y=1;
kd=1;
}
break;
case 37:
if(diretion.x!=1&&kd==0){
diretion.x=-1;
diretion.y=0;
kd=1;
}
break;
}
})
chushi();
var time = setInterval(function(){
kd=0;
ctx.clearRect(0,0,wide,high);
update();
draw();
},speed);
編是一個有著6年工作經驗的工程師,關于C++編程,自己有做材料的整合,一個完整的C++編程學習路線,學習資料和工具,能夠進我的群10048,-83029收取,免費送給大家,希望你也能憑著自己的努力,成為下一個優秀的程序員
C++ 資源大全中文版
我想很多程序員應該記得 GitHub 上有一個 Awesome – XXX 系列的資源整理。awesome-cpp 就是 fffaraz 發起維護的 C++ 資源列表,內容包括:標準庫、Web應用框架、人工智能、數據庫、圖片處理、機器學習、日志、代碼分析等。
Awesome 系列雖然挺全,但基本只對收錄的資源做了極為簡要的介紹,如果有更詳細的中文介紹,對相應開發者的幫助會更大。這也是我們發起這個開源項目的初衷。
伯樂在線已在 GitHub 上發起「C++ 資源大全中文版」的整理。歡迎擴散、歡迎加入。https://github.com/jobbole/awesome-cpp-cn
標準庫
C++標準庫,包括了STL容器,算法和函數等。
框架
C++通用框架和庫
人工智能
異步事件循環
音頻
音頻,聲音,音樂,數字化音樂庫
生態學
生物信息,基因組學和生物技術
壓縮
壓縮和歸檔庫
并發性
并發執行和多線程
容器
密碼學
算法
數據庫
數據庫,SQL服務器,ODBC驅動程序和工具
調試
調試庫, 內存和資源泄露檢測,單元測試
游戲引擎
圖形用戶界面
圖形
圖像處理
國際化
Json
日志
Boost.Log :設計非常模塊化,并且具有擴展性
easyloggingpp:C++日志庫,只包含單一的頭文件。
Log4cpp :一系列C++類庫,靈活添加日志到文件,系統日志,IDSA和其他地方。
templog:輕量級C++庫,可以添加日志到你的C++應用程序中
機器學習
數學
多媒體
網絡
物理學
動力學仿真引擎
機器人學
科學計算
腳本
序列化
視頻
虛擬機
Web應用框架
XML
XML就是個垃圾,xml的解析很煩人,對于計算機它也是個災難。這種糟糕的東西完全沒有存在的理由了。-Linus Torvalds
多項混雜
一些有用的庫或者工具,但是不適合上面的分類,或者還沒有分類。
軟件
用于創建開發環境的軟件
編譯器
C/C++編譯器列表
在線編譯器
在線C/C++編譯器列表
調試器
C/C++調試器列表
集成開發環境(IDE)
C/C++集成開發環境列表
構建系統
靜態代碼分析
提高質量,減少瑕疵的代碼分析工具列表
給大家推薦一下學習研究HTML5必備的一些個網站,更加有利于大家對html5的學些和研究。
1. W3C HTML 5 權威教程,學習HTML5的各種標簽,查詢參考手冊。
2. HTMLDemos可以插件HTML5標簽在各瀏覽器的兼容性,同時你還可以查看各種HTML5的標準Demo演示。
3. 蘋果提供的HTML5演示站點,提供很多很絢麗的HTML5Demo。鏈接
4. 測試瀏覽器對HTML5的支持,并打分,可以知道你當前的瀏覽器對HTML5的支持情況如何,各種標簽和組件的支持情況。鏈接
5.360的HTML5基地。鏈接
6. WHATWG博客是網絡超文本應用技術工作小組(Web Hypertext Application Technology Working Group)的博客。鏈接
7. HTML5醫生發表了許多文章,都是關于HTML5及其語義、及如何正確使用它的。他們也通過“詢問醫生”收集了很多問題,并在文章中予以回答,所有人都可從中受益。鏈接
8. 這是一個以表格制成的備忘單形式的單頁面,描述了HTML5、CSS3、SVG及其他未來網絡技術的特征。鏈接
9. 這個備忘單就是一個簡單的可視網格,包含了所有HTML5標簽和相關的屬性。鏈接
10 .一個提供HTML5各種功能演示的網站,提供各種HTML5的顯示Demo。鏈接
11. 這個網站提供了大量的HTML5游戲資源,喜歡HTML5游戲的童鞋們,可以千萬別錯過哦。鏈接
12. 一個HTML 5的文檔資料網站,做得很出色。介紹的圖片全是用了涂鴉的方式,很直觀,很可愛的網站。鏈接
13.h5之家(中文學習園地)。鏈接
今天就給大家推薦到這里,這15個網站,基本上可以算得上是HTML5學習研究的上上至寶了。如果你也有更好的HTML5網站推薦,歡迎評論并留下網址信息,方便整理。
出于對PMCAFF用戶的尊重,任何在PMCAFF產品經理社區發布的內容,在未經允許的情況下,不得在任何平臺被直接或間接發布使用或被用于其他任何商業目的。如有違反上述聲明者本網站將追究其相關法律責任。
微信公眾號:pmcaffcom
投稿郵箱:tougao@pmcaff.com
Greated by PMCAFF產品經理社區 - www.pmcaff.com
*請認真填寫需求信息,我們會在24小時內與您取得聯系。