1. 程式人生 > >利用js寫的見縫插針小遊戲(推薦給新手)

利用js寫的見縫插針小遊戲(推薦給新手)

   標題之所以寫推薦給新手,是因為我也是個剛學js一週的新人,想練練手,於是就花了一下午寫了這個遊戲,所以我寫的可能更適合新手,大神勿噴吐舌頭

   這個遊戲是利用原生的js以及html5的canvas技術做的一個小遊戲,遊戲規則跟手機上的見縫插針一樣的,這是我的遊戲介面:

這個是無限插針的,就是針有無限多,直到你失敗了或是點選reset按鈕停止.

以下把我的原始碼貼出來供大家參考:

js程式碼:

var ctx;//工具
var canvas;//畫布
var canalpha=0;
var cirradius=100;
var smciradius=15;
var ani=false;//動畫是否在進行中
var speed=30;//針的速度 var ins=false;//是否可以觸發insert動畫 var n=0;//針的步長 var num=1;//針的編號 var angel=[];//各針停留時的角度陣列 angel[0]=0;//初始化為1根針時設定,可改變 var speed2=200;//旋轉速度 var over=false;//遊戲結束標誌 var INTERID;//周期函式ID function drawmap() { ctx.fillStyle = "rgba(50%,25%,25%,0.5)"; ctx.translate(250, 250); ctx.rotate(canalpha); ctx
.translate(-250, -250); ctx.beginPath(); ctx.arc(250, 250, cirradius, 0, Math.PI * 2, true); ctx.moveTo(250, 350); ctx.lineTo(250, 450); ctx.closePath(); ctx.fill(); ctx.stroke(); ctx.fillStyle = "rgba(0,0,0,0.5)"; ctx.beginPath(); ctx.arc(250, 465, smciradius, 0, Math.PI * 2
, true); ctx.closePath(); ctx.fill(); if(!ins) { drawNail(num); }else{ nailact(num); } for (var j = 1; j <= angel.length; j++) { ctx.fillStyle = "rgba(0,0,0,0.5)";//由於填充顏色只能用於一次路徑或fill函式,所以需放在迴圈內 ctx.beginPath(); ctx.arc(250 + Math.sin(angel[j]) * 215, 600 - (350 - Math.cos(angel[j]) * 215), smciradius, 0, Math.PI * 2, true); ctx.moveTo(250 + Math.sin(angel[j]) * 200, 450 - (200 * (1 - Math.cos(angel[j])))); ctx.lineTo(250 + Math.sin(angel[j]) * 100, 450 - (200 - Math.cos(angel[j]) * 100)); ctx.fill(); ctx.stroke(); ctx.closePath(); ctx.fillStyle = "#FFFFFF"; ctx.fillText(j, 247 + Math.sin(angel[j]) * 215, 605 - (350 - Math.cos(angel[j]) * 215)); } } function mapact(){ canvas=document.getElementById("canvas"); ctx=canvas.getContext("2d"); if(!over) { ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); ctx.save(); drawmap(); ctx.restore(); overgame(); canalpha += Math.PI / speed2; }else{ window.clearInterval(INTERID); var pa=document.createElement("p"); pa.innerHTML="You Lose!!"; document.getElementById("info").appendChild(pa); } } function nailact(i){ ctx.fillStyle="rgba(0,0,0,0.5)"; if((350-(n+1)*speed)>=215) { ctx.beginPath(); ctx.arc(250 + Math.sin(canalpha) * (350 - n * speed), 600 - (350 - Math.cos(canalpha) * (350 - n * speed)), smciradius, 0, Math.PI * 2, true); ctx.closePath(); ctx.fill(); ctx.fillStyle = "#FFFFFF"; ctx.fillText(i, 247 + Math.sin(canalpha) * (350-n*speed), 605 - (350 - Math.cos(canalpha) * (350 - n * speed))); n++; }else{ /*ctx.beginPath(); ctx.arc(250 + Math.sin(canalpha) * 215, 600 - (350 - Math.cos(canalpha) * 215), smciradius, 0, Math.PI * 2, true); ctx.moveTo(250+ Math.sin(canalpha) * 200,450-(200*(1 - Math.cos(canalpha)))); ctx.lineTo(250+ Math.sin(canalpha) * 100, 450-(200 - Math.cos(canalpha) *100)); ctx.fill(); ctx.stroke(); ctx.closePath(); ctx.fillStyle = "#FFFFFF"; ctx.fillText(j, 247 + Math.sin(canalpha) *215, 605 - (350 - Math.cos(canalpha) * 215));* / * 嘗試畫面無閃頓的方法*/ angel[i]=canalpha; num++; n=0; ins=false; } } function drawNail(i){ ctx.fillStyle="rgba(0,0,0,0.5)"; ctx.beginPath(); ctx.arc(250+Math.sin(canalpha)*350,600-(1-Math.cos(canalpha))*350,smciradius,0,Math.PI*2,true); ctx.closePath(); ctx.fill(); ctx.fillStyle="#FFFFFF"; ctx.fillText(i,247+Math.sin(canalpha)*350,605-(1-Math.cos(canalpha))*350); } function run(){ var but=document.getElementById("run"); but.disabled = true;//按鈕變得不可用 ani=true;//開啟動畫 INTERID=setInterval(mapact,30); //number=1000/fps } function insert(){ //接受使用者的插入指令 var but2=document.getElementById("insert"); if(ani){ ins=true; }else{ return; } } function overgame()//判斷遊戲是否結束 { for(var j=0;j<angel.length;j++) { if ((Math.abs(Math.sin((angel[num-1] - angel[j]) / 2))<3/43)&&(j!=num-1)) { over = true; } } } function ref() { window.location="yx.html"; } window.onload=function(){ var but=document.getElementById("run"); but.disabled = false; mapact(); }

這是我的html程式碼(yx.html):

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script src="cc.js"></script>
</head>
<body>

       <canvas id="canvas" width="700px" height="700px"></canvas>
       <div id="info"></div>
       <input type="button" value="run" onclick="run()" id="run"/>
       <input type="button" value="insert" onclick="insert()" id="insert"/>
       <input type="button" value="reset" onclick="ref()" id="reset"/>
</body>
</html>

程式碼中有一些變數是直接用數字給出的,一些是位置資料,這個可以根據你們的需要更改,另一些是根據位置資料計算出的,最初設計時沒有把他設定成全域性變數是我的失誤,以後再寫程式碼時會注意的,遊戲結束判定是根據角度之差是否滿足兩球互不相碰判定的。

個人感覺基本流程有三點:

1.明白遊戲之後,先畫出初始介面

2.寫出遊戲的動畫

3.寫出遊戲的一些判斷邏輯,最後修飾一下介面即可。

這是我的感受,給大家分享一下,就是這樣。

相關推薦

利用js見縫插針遊戲推薦新手)

   標題之所以寫推薦給新手,是因為我也是個剛學js一週的新人,想練練手,於是就花了一下午寫了這個遊戲,所以我寫的可能更適合新手,大神勿噴。    這個遊戲是利用原生的js以及html5的canvas技術做的一個小遊戲,遊戲規則跟手機上的見縫插針一樣的,這是我的遊戲介面:

用原生js2048遊戲

gin 小遊戲 替換 上下 數位 免費學習 title index.php parseint <!DOCTYPE html> <html> <head> <title> 2048-game </title&g

python五子棋遊戲pygame模組)

第一篇部落格 暑假學了十幾天python,然後用pygame模組寫了一個五子棋的小遊戲,程式碼跟有緣人分享一下,然後一些資源可以加我qq(2395425694)找我要(記得評論點贊)。 import numpy as np import pygame import sys impor

js貪吃蛇遊戲相容ie8)DOM,BOM操作

效果圖 本篇將使用JavaScript 編寫一個貪吃蛇的小遊戲,採用OOP(面向物件)程式設計 基本沒有CSS樣式和HTML結構,主要是體會js操作 HTML程式碼 <div class="map"></div> &

python掃雷遊戲pygame)

學了python後,在9月初開始比賽,比賽類容是在一個星期內(白天有課,其實只有星期一到星期五晚上和雙休有時間寫程式碼)完成指定的一個程式,程式可以選擇,我選的是掃雷,因為之前有過做五子棋的基礎,完成掃雷也不算難。 程式碼跟有緣人分享一下,資源可以加我qq(23

js--貪吃蛇遊戲加牆)

---新手上路,路過的大佬多多指教。用了大半天的時間熟悉了一下js的基本語法,學習他就是為了寫幾個小的網頁遊戲。網上的關於js寫的貪吃蛇遊戲的程式碼比比皆是,我就學了一個試著自己寫。寫了將近兩天,還有很多介面問題我還有很多想法沒實現。先寫個小部落格,後面有加就再改改博文就好

原生JS《畫素鳥》的遊戲下落的小鳥)

HTML頁面程式碼:<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="style

JS實現簡易版貪吃蛇遊戲js程式碼)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head&

掃雷遊戲粗略的,可以應該多用函式簡單明瞭)

#include<stdio.h> #include<windows.h> #include<stdlib.h> #include<time.h> void menu() { printf("****************

JS實現最簡單的貪吃蛇遊戲面向物件思想)

本次練習主要是練習javaScript的面對物件思想話不多說,先看看效果圖功能描述:1.小蛇在指定地圖內移動,撞到邊界即彈窗,顯示遊戲結束                  2.通過上、下、左、右四個按鍵,控制小蛇運動的方向                   3.隨機產生“

從零到一:用Phaser.js寫意地開發遊戲Chapter 3

上一節我們搭建了遊戲的骨架,添加了四個遊戲場景,分別是載入、開始、遊戲、結束。那麼這一節我們來介紹載入這個場景,順帶豐富一下各個場景的基本內容。 Phaser.Loader Phaser框架自帶的一個loader,支援載入多種型別的資源,下面是離線文件中的介紹的截圖,

用Python一個遊戲

python 小腳本 剛學Python時間不長,但也知道了一點,看別人的參考寫了一個猜數字小遊戲,也算是禹學於樂吧。#!/usr/bin/env python #coding=utf-8

ex36 自己編的一個冒險遊戲未完待續)

may num eth front exit import dea org island 1 #-*- coding: UTF-8 -*- 2 from sys import exit 3 #作出判斷選擇進森林還是出海冒險 4 def start():

白話kali linux上可以安裝什麽遊戲好奇版)

意思 好奇心 有一個 貪吃蛇 精神的 入門 ack web cman 技術博客的可讀性非常重要,這也是技術博客寫作的重要原則。 電腦系統是kali linux2018.1版本的,64bit 遊戲是極客精神的產物,這句話沒毛病。 因為之前在windows電腦上一直都是很方便的

JS貪吃蛇遊戲

ttr etime opened IE title 跨瀏覽器 tac 再次 key 效果圖展示: 具體實現代碼如下: (1)html部分 1 !DOCTYPE html> 2 <html> 3 <head> 4

使用JavaScript實現剪刀石頭布的遊戲由淺到深)

spa val 能夠 click 隨機 相對 運算 func query 使用JavaScript實現剪刀石頭布的小遊戲 簡單的解析: 剪刀石頭布的原理類似於一個數組中數字大小的比較,當然我們也可以將其分別使用對應的數字來代表剪刀石頭布,在這裏我們將 0 - 剪

wxpython開發一個遊戲一)

添加 title RR .text all SM add author tdi # _*_ coding: utf-8 _*___author__ = ‘pythonwu‘__date__ = "2018/5/13 21:33"import wximport osclass

python的pygame模組掃雷遊戲

學了python後,在9月初開始比賽,比賽類容是在一個星期內(白天有課,其實只有星期一到星期五晚上和雙休有時間寫程式碼)完成指定的一個程式,程式可以選擇,我選的是掃雷,因為之前有過做五子棋的基礎,完成掃雷也不算難。 程式碼跟有緣人分享一下,資源可以加我qq(2395425694)找我要(記得

Cocos Creator 入門篇-描摹遊戲cocos描摹數字,描摹英語字母,描摹圖形)

cocos creator寫遊戲還是很友好的,官方文件給的也挺全。今天帶大家來用cocoscreator實現描摹數字/描摹英文字母/描摹直線曲線的功能。 實現思路 這裡我們已描摹數字2為例,來講下具體實現思路。其實我們不管是做描摹,還是做畫線,畫圖形。我們都是通過直線連結一個個

three.js 微信遊戲

import './js/libs/weapp-adapter' import './js/libs/symbol' import * as THREE from './js/engine/three.min' let scene = new THREE.Scene() let camera = new