课程设计:使用JavaScript制作一个网页上的贪吃蛇游戏

课程设计:使用JavaScript制作一个网页上的贪吃蛇游戏,第1张

<html>

<head>

<title>贪吃蛇 Snake v2.4</title>

<style>

body{

font-size:9pt

}

table{

border-collapse: collapse

border:solid #333 1px

}

td{

height: 10px

width: 10px

font-size: 0px

}

.filled{

background-color:blue

}

</style>

</head>

<script>

function $(id){return document.getElementById(id)}

/**************************************************************

* javascript贪吃蛇 v2.4 <br />

* author: sunxing007 05/14/2009<br />

* 转载请注明来自http://blog.csdn.net/sunxing007 谢谢!<br />

* v2.4修正了蛇身颜色可以随着蛇前进而移动

**************************************************************/

//贪吃蛇类

var Snake = {

tbl: null,

/**

* body: 蛇身,数组放蛇的每一节,

* 数据结构{x:x0, y:y0, color:color0},

* x,y表示坐标,color表示颜色

**/

body: [],

//当前移动的方向,取值0,1,2,3, 分别表示向上,右,下,左, 按键盘方向键可以改变它

direction: 0,

//定时器

timer: null,

//速度

speed: 250,

//是否已经暂停

paused: true,

//行数

rowCount: 30,

//列数

colCount: 30,

//初始化

init: function(){

var colors = ['red','orange','yellow','green','blue','purple','#ccc']

this.tbl = $("main")

var x = 0

var y = 0

var colorIndex = 0

//产生初始移动方向

this.direction = Math.floor(Math.random()*4)

//构造table

for(var row=0row<this.rowCountrow++){

var tr=this.tbl.insertRow(-1)

for(var col=0col<this.colCountcol++) {

var td=tr.insertCell(-1)

}

}

//产生20个松散节点

for(var i=0i<10i++){

x = Math.floor(Math.random()*this.colCount)

y = Math.floor(Math.random()*this.rowCount)

colorIndex = Math.floor(Math.random()*7)

if(!this.isCellFilled(x,y)){

this.tbl.rows[y].cells[x].style.backgroundColor = colors[colorIndex]

}

}

//产生蛇头

while(true){

x = Math.floor(Math.random()*this.colCount)

y = Math.floor(Math.random()*this.rowCount)

if(!this.isCellFilled(x,y)){

this.tbl.rows[y].cells[x].style.backgroundColor = "black"

this.body.push({x:x,y:y,color:'black'})

break

}

}

this.paused = true

//添加键盘事件

document.onkeydown= function(e){

if (!e)e=window.event

switch(e.keyCode | e.which | e.charCode){

case 13: {

if(Snake.paused){

Snake.move()

Snake.paused = false

}

else{

//如果没有暂停,则停止移动

Snake.pause()

Snake.paused = true

}

break

}

case 37:{//left

//阻止蛇倒退走

if(Snake.direction==1){

break

}

Snake.direction = 3

break

}

case 38:{//up

//快捷键在这里起作用

if(event.ctrlKey){

Snake.speedUp(-20)

break

}

if(Snake.direction==2){//阻止蛇倒退走

break

}

Snake.direction = 0

break

}

case 39:{//right

if(Snake.direction==3){//阻止蛇倒退走

break

}

Snake.direction = 1

break

}

case 40:{//down

if(event.ctrlKey){

Snake.speedUp(20)

break

}

if(Snake.direction==0){//阻止蛇倒退走

break

}

Snake.direction = 2

break

}

}

}

},

//移动

move: function(){

this.timer = setInterval(function(){

Snake.erase()

Snake.moveOneStep()

Snake.paint()

}, this.speed)

},

//移动一节身体

moveOneStep: function(){

if(this.checkNextStep()==-1){

clearInterval(this.timer)

alert("Game over!\nPress Restart to continue.")

return

}

if(this.checkNextStep()==1){

var _point = this.getNextPos()

var _x = _point.x

var _y = _point.y

var _color = this.getColor(_x,_y)

this.body.unshift({x:_x,y:_y,color:_color})

//因为吃了一个食物,所以再产生一个食物

this.generateDood()

return

}

//window.status = this.toString()

var point = this.getNextPos()

//保留第一节的颜色

var color = this.body[0].color

//颜色向前移动

for(var i=0i<this.body.length-1i++){

this.body[i].color = this.body[i+1].color

}

//蛇尾减一节, 蛇尾加一节,呈现蛇前进的效果

this.body.pop()

this.body.unshift({x:point.x,y:point.y,color:color})

//window.status = this.toString()

},

//探寻下一步将走到什么地方

pause: function(){

clearInterval(Snake.timer)

this.paint()

},

getNextPos: function(){

var x = this.body[0].x

var y = this.body[0].y

var color = this.body[0].color

//向上

if(this.direction==0){

y--

}

//向右

else if(this.direction==1){

x++

}

//向下

else if(this.direction==2){

y++

}

//向左

else{

x--

}

//返回一个坐标

return {x:x,y:y}

},

//检查将要移动到的下一步是什么

checkNextStep: function(){

var point = this.getNextPos()

var x = point.x

var y = point.y

if(x<0||x>=this.colCount||y<0||y>=this.rowCount){

return -1//触边界,游戏结束

}

for(var i=0i<this.body.lengthi++){

if(this.body[i].x==x&&this.body[i].y==y){

return -1//碰到自己的身体,游戏结束

}

}

if(this.isCellFilled(x,y)){

return 1//有东西

}

return 0//空地

},

//擦除蛇身

erase: function(){

for(var i=0i<this.body.lengthi++){

this.eraseDot(this.body[i].x, this.body[i].y)

}

},

//绘制蛇身

paint: function(){

for(var i=0i<this.body.lengthi++){

this.paintDot(this.body[i].x, this.body[i].y,this.body[i].color)

}

},

//擦除一节

eraseDot: function(x,y){

this.tbl.rows[y].cells[x].style.backgroundColor = ""

},

paintDot: function(x,y,color){

this.tbl.rows[y].cells[x].style.backgroundColor = color

},

//得到一个坐标上的颜色

getColor: function(x,y){

return this.tbl.rows[y].cells[x].style.backgroundColor

},

//用于调试

toString: function(){

var str = ""

for(var i=0i<this.body.lengthi++){

str += "x:" + this.body[i].x + " y:" + this.body[i].y + " color:" + this.body[i].color + " - "

}

return str

},

//检查一个坐标点有没有被填充

isCellFilled: function(x,y){

if(this.tbl.rows[y].cells[x].style.backgroundColor == ""){

return false

}

return true

},

//重新开始

restart: function(){

if(this.timer){

clearInterval(this.timer)

}

for(var i=0i<this.rowCounti++){

this.tbl.deleteRow(0)

}

this.body = []

this.init()

this.speed = 250

},

//加速

speedUp: function(time){

if(!this.paused){

if(this.speed+time<10||this.speed+time>2000){

return

}

this.speed +=time

this.pause()

this.move()

}

},

//产生食物。

generateDood: function(){

var colors = ['red','orange','yellow','green','blue','purple','#ccc']

var x = Math.floor(Math.random()*this.colCount)

var y = Math.floor(Math.random()*this.rowCount)

var colorIndex = Math.floor(Math.random()*7)

if(!this.isCellFilled(x,y)){

this.tbl.rows[y].cells[x].style.backgroundColor = colors[colorIndex]

}

}

}

</script>

<body onload="Snake.init()">

/*************************************************************<br />

* javascript贪吃蛇 v2.4<br />

* author: sunxing007 05/14/2009<br />

* 转载请注明来自 <a href="http://blog.csdn.net/sunxing007">http://blog.csdn.net/sunxing007</a>谢谢!<br />

**************************************************************/<br />

<table id="main" border="1" cellspacing="0" cellpadding="0"></table>

<input type="button" id="btn" value="开始/暂停" />点左边按钮或按Enter开始/暂停游戏<br />

<input type="button" id="reset" value="重新开始" /><br />

<input type="button" id="upSpeed" value="加速" />点左边按钮或按Ctrl + ↑加速<br />

<input type="button" id="downSpeed" value="减速" />点左边按钮或按Ctrl + ↓减速

<script>

$('btn').onclick = function(){

if(Snake.paused){

Snake.move()

Snake.paused = false

}

else{

Snake.pause()

Snake.paused = true

}

}

$("reset").onclick = function(){

Snake.restart()

this.blur()

}

$("upSpeed").onclick = function(){

Snake.speedUp(-20)

}

$("downSpeed").onclick = function(){

Snake.speedUp(20)

}

</script>

</body>

</html>

随着动画技术的不断发展,网络传播速度越来越快,Flash游戏已经成为现在人生活娱乐,打发时间,缓解压力的一项不可或缺的项目。而一个优秀的Flash游戏离不开游戏画面、程序脚本以及后期音效的共同作用。因此,越来越多有着引人入胜的剧情,丰富有趣的画面,好听难忘的音乐的Flash小游戏在互联网上被越来越多的玩家喜爱和分享。当这些兼具艺术性与流行性的元素都由一个游戏组合到一起,人们可以从中得到娱乐和放松,同时有得到一些对生活对人生的启发,让人会心一笑。而创作者也可以选择不同的风格,不同的手法用计算机的一系列数码艺术创作手法实现自己的创意,然后在一些交流互动网站上发表,供他人娱乐或者借鉴,同时也可以得到广大互联网用户的意见,从而提高自身的创作水品。由此可见,Flash游戏设计的意义就在于:集合不同的艺术门类,把艺术与技术相结合。从而让人可以在游戏中的到美的享受。给广大的互联网用户提供了一个娱乐,休闲,放松身心的地方。让设计师之与玩家之间产生交流,从而完善游戏。 *** 作便捷,文件携带方便,无需安装,符合了现在很多快餐式的生活要求便于大众随时的下载,游戏。有丰富的图像,画面不受软件的限制。富有创意,风格多变。是其他电子游戏没有的。国内外研究现状及分析:目前利用Flash开发出了许多夸平台的网络游戏,甚至可以匹敌大型MMOR,在3G时代到来以后,我们很快可以在手机上玩到大型网络游戏,现有的Flash制作网络游戏有:SLG类(热血三国),体育类(热血球球),RPG类(凡人修真),桌面( *** ),TD类(保卫家园)等等.在日本和美国,动画和游戏这一类的技术超出国内比较多,日本的动漫位居世界前列是众所周知的。要想在这一方面能有所作为,仍需加倍努力。

有一种游戏叫“贪食蛇”,又名贪吃蛇。一条小蛇,不停地在屏幕上游走,吃各个方向出现的蛋,每吃一颗,就长长一点,吃得越多,长得越长,当手机上的小蛇越来越长,积分便越来越高,游戏边越来越紧张刺激,死亡便悄然降临。因为,贪食蛇身子越长活动空间越窄,这时才后悔太贪吃了。屏幕的空间是有限的,只要蛇头碰到屏幕四周,或者碰到自己的身子,小蛇立即毙命。

贪食蛇是一个彻头彻尾的悲剧性游戏,不管玩家自认玩得多么纯熟,手艺多么高超,最终会发现自己将走投无路。那时候,也许玩家不再贪吃,也许玩家明白受到了死亡的威胁,但玩家突然发现自己开始手忙脚乱,疲于奔命了,一切的努力都无济于事,结局必定是听到小蛇的一声惨叫。其实,悲剧结局在游戏开始就注定了,因为这是个特殊的游戏,这个游戏有个要命的字,那就是“贪”!

“贪食蛇”游戏,起初看起来机会甚多,猎物遍地,实际上却步步陷阱,暗藏杀机。游戏开始时,蛇身很短,由于难度小,很容易让人掉以轻心,你会不知不觉加快速度,正是在这个不知不觉的过程中,蛇身在慢慢加长。但玩家往往忽略了这种潜在的危险,麻痹大意,在最得意洋洋的一刻,死亡突然降临。

贪食蛇贪吃,最终吃死了自己,微妙之处在神不知鬼不觉间,一步步把自己推向毁灭的深渊。贪食是一种欲望,更是一种诅咒,只要沾上,便会被利益蒙蔽双眼,便会生出诸多的侥幸,便会欲罢不能,便会淬不及防地一头栽进自己掘下的陷进,用悲壮的一生,给人类一个警示。

由贪食蛇,联想到贪官,都栽在一个“贪”字上,性质上有许多相似。贪官上任伊始或许是清正廉洁的,也被党性武装着头脑,金刚不坏,五毒不侵。但每个人都有情感的缺口——亲人,朋友!于是,便有人上门来打亲情牌,打朋友的幌子,请吃饭,送水果等。这些活动在友谊范围之类,既不违纪,也不犯法。于是,一条烟,一瓶酒,一桌宴席……但事情往往不会仅此而已,有了这一次,还有下一次,虽不合理,但却合情,一次比一次铺张,一次比一次升级,似乎跟前一次也没有多大差别,自认不是什么大事。不知不觉间,“友谊”在加深,“吃”进的东西越来越多,胆子越来越大,戒心也慢慢消除,贪欲慢慢形成,后患越来越大。自己还觉得在亲情、友情的圈子里转呢,内心谬之毫厘,法度上失之千里。在不经意间一步步滑向深渊,万劫不复。

小到个人,大到官场,都可以以贪食蛇为参照。开始时,只是品办公茶,抽办公烟,喝办公酒,吃公家宴席……今天一点,明天一点,吃单位,吃国家,最后吃喝拉撒全让国家报销,用公家钱满足自己在物质和精神上的欲求,这似乎也不是什么大不了的事。事情还不会就此止步,要求慢慢变高,警惕慢慢放松,范围慢慢扩大,连家人和亲友也开始享受单位的“福利”,利用职权之便,用公家钱套私人感情,损公肥私,甚至中饱私囊,把国家的钱变成自己的钱,把赃款漂白成合法收入……一点点偏离党性,一点点背离人民,最终成为国家和人民的蛀虫,站在人民的对立面上,成为人民的罪人。这跟贪食蛇游戏完全一样,最终自己吃死自己!

规避这种不幸的惟一的办法,就是远离这种危险的悲剧性游戏,彻底戒除“贪”念,不与“贪”字沾边,远离了诱惑,远离了陷阱,才能稳健地站立在大地上,昂首挺胸,留一身正气,舞两袖清风,傲立于天地之间,撑起头顶一片朗朗晴空!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/7476074.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-06
下一篇2023-04-06

发表评论

登录后才能评论

评论列表(0条)

    保存