一个小游戏,类似flash贪吃蛇小游戏,一条绿色一条紫色,无限延伸直到碰到东西,然后谁先碰到谁就输,是什么游戏?

有一款游戏就好像是五打五,两方对战一个紫色一个绿色,然后就是枪战看谁最后颜色占地面积多是啥._百度知道
有一款游戏就好像是五打五,两方对战一个紫色一个绿色,然后就是枪战看谁最后颜色占地面积多是啥.
我有更好的答案
楼主别吹过头了,鬼泣5还没出呢!(就算发行了PC也要等移植)鬼泣4神优化了,低配机好多都玩得了。差不多要求的游戏玩过的我下,动作类:虐杀原型,古墓丽影系列。赛车游戏:极品飞车9,火爆狂飙5,尘埃2。枪战类:三角洲部队系列,荣誉勋章系列(除最新的版本),使命召唤4。其次GTA3之圣安地列斯也很不错。
采纳率:97%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C语言 小游戏之贪吃蛇 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 21时,
C语言编写的一个简单的贪吃蛇游戏,原理很简单,挺有意思的!&&&&&today,&start&to&play&os!
代码片段(2)
1.&[代码]C语言 贪吃蛇游戏&&&&
//*******************************************************
//*******************************************************
//******友情提示:如想速度快点,请改小_sleep(500)函数中参数*****
//*******************************************************
//*******************如写的不好,请见谅*********************
//*******************************************************
#include &stdio.h&
#include &stdlib.h&
#include &conio.h&
#include &string.h&
#include &time.h&
const int H = 8;
//地图的高
const int L = 16;
//地图的长
char GameMap[H][L];
//游戏地图
//按键保存
sum = 1, over = 0;
//蛇的长度, 游戏结束(自吃或碰墙)
dx[4] = {0, 0, -1, 1};
//左、右、上、下的方向
dy[4] = {-1, 1, 0, 0};
struct Snake
//蛇的每个节点的数据类型
//左边位置
//保存当前节点的方向, 0,1,2,3分别为左右上下
}Snake[H*L];
const char Shead = '@';
const char Sbody = '#';
const char Sfood = '*';
const char Snode = '.';
//'.'在地图上标示为空
void Initial();
//地图的初始化
void Create_Food(); //在地图上随机产生食物
void Show();
//刷新显示地图
void Button();
//取出按键,并判断方向
void Move();
//蛇的移动
void Check_Border();
//检查蛇头是否越界
void Check_Head(int x, int y);
//检查蛇头移动后的位置情况
int main()
Initial();
void Initial()
//地图的初始化
system("title 贪吃蛇");
//控制台的标题
memset(GameMap, '.', sizeof(GameMap));
//初始化地图全部为空'.'
system("cls");
srand(time(0));
//随机种子
hx = rand()%H;
//产生蛇头
hy = rand()%L;
GameMap[hx][hy] = S
Snake[0].x =
Snake[0].y =
Snake[0].now = -1;
Create_Food();
//随机产生食物
for(i = 0; i & H; i++)
//地图显示
for(j = 0; j & L; j++)
printf("%c", GameMap[i][j]);
printf("\n");
printf("\n小小C语言贪吃蛇\n");
printf("按任意方向键开始游戏\n");
//先接受一个按键,使蛇开始往该方向走
//取出按键,并判断方向
void Create_Food()
//在地图上随机产生食物
fx = rand()%H;
fy = rand()%L;
if(GameMap[fx][fy] == '.')
//不能出现在蛇所占有的位置
GameMap[fx][fy] = S
void Show()
//刷新显示地图
_sleep(500); //延迟半秒(1000为1s),即每半秒刷新一次地图
//先判断按键在移动
//自吃或碰墙即游戏结束
printf("\n**游戏结束**\n");
getchar();
system("cls");
//清空地图再显示刷新吼的地图
for(i = 0; i & H; i++)
for(j = 0; j & L; j++)
printf("%c", GameMap[i][j]);
printf("\n");
printf("\n小小C语言贪吃蛇\n");
printf("按任意方向键开始游戏\n");
void Button()
//取出按键,并判断方向
if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
while(kbhit() != 0)
//可能存在多个按键,要全部取完,以最后一个为主
key = getch(); //将按键从控制台中取出并保存到key中
switch(key)
Snake[0].now = 0;
Snake[0].now = 1;
Snake[0].now = 2;
Snake[0].now = 3;
void Move()
//蛇的移动
//保存当前蛇的长度
//记录当前蛇头的位置,并设置为空,蛇头先移动
x = Snake[0].x;
y = Snake[0].y;
GameMap[x][y] = '.';
Snake[0].x = Snake[0].x + dx[ Snake[0].now ];
Snake[0].y = Snake[0].y + dy[ Snake[0].now ];
Check_Border();
//蛇头是否越界
Check_Head(x, y);
//蛇头移动后的位置情况,参数为: 蛇头的开始位置
if(sum == t)
//未吃到食物即蛇身移动哦
for(i = 1; i & i++)
//要从蛇尾节点向前移动哦,前一个节点作为参照
if(i == 1)
//尾节点设置为空再移动
GameMap[ Snake[i].x ][ Snake[i].y ] = '.';
if(i == sum-1)
//为蛇头后面的蛇身节点,特殊处理
Snake[i].x =
Snake[i].y =
Snake[i].now = Snake[0].
//其他蛇身即走到前一个蛇身位置
Snake[i].x = Snake[i+1].x;
Snake[i].y = Snake[i+1].y;
Snake[i].now = Snake[i+1].
GameMap[ Snake[i].x ][ Snake[i].y ] = '#'; //移动后要置为'#'蛇身
void Check_Border()
//检查蛇头是否越界
if(Snake[0].x & 0 || Snake[0].x &= H
|| Snake[0].y & 0 || Snake[0].y &= L)
void Check_Head(int x, int y)
//检查蛇头移动后的位置情况
if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.')
GameMap[ Snake[0].x ][ Snake[0].y ] = '@';
if(GameMap[ Snake[0].x ][ Snake[0].y ] == '*')
GameMap[ Snake[0].x ][ Snake[0].y ] = '@';
Snake[sum].x =
//新增加的蛇身为蛇头后面的那个
Snake[sum].y =
Snake[sum].now = Snake[0].
GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#';
Create_Food();
//食物吃完了马上再产生一个食物
2.&[图片] 0_gGb.gif&&&&
开源中国-程序员在线工具:
相关的代码(2869)
3回/3981阅
0回/1139阅
3回/1710阅
0回/1471阅
E:\desktop&gcc snake.c -o snake
snake.c:14:6: error: variably modified 'GameMap' at file scope
snake.c:14:6: error: variably modified 'GameMap' at file scope
snake.c:23:2: error: variably modified 'Snake' at file scope
snake.c: In function 'Show':
snake.c:88:3: warning: '_sleep' is deprecated (declared at e:\e
2楼:wuqinfei 发表于
这可如何是好
3楼:Pluser 发表于
引用来自“wuqinfei”的评论这可如何是好I can run it by vc6.0 and vs2010
4楼:海里没泡泡 发表于
可以在vc6.0上运行啊,不过楼主用的是什么编译器,求解
5楼:pqiankui 发表于
conio库仅适用于 Windows 平台
6楼:混沌路人 发表于
不能反方向运行。
一般都会把反方向视作无效。
7楼:Pluser 发表于
引用来自“海里没泡泡”的评论可以在vc6.0上运行啊,不过楼主用的是什么编译器,求解VC6.0 + VS2010
8楼:Pluser 发表于
引用来自“混沌路人”的评论不能反方向运行。
一般都会把反方向视作无效。是的 我当初就是这样设置的,如果视为无效 可简单设置就OK了
9楼:go明骚暗贱 发表于
是啥意思,求解
10楼:GM563536 发表于
引用来自“go明骚暗贱”的评论case 75:
是啥意思,求解是ascll码值,
11楼:go明骚暗贱 发表于
引用来自“go明骚暗贱”的评论case 75:
是啥意思,求解引用来自“GM563536”的评论是ascll码值,通过H K M P 来实现上下左右的操作吗?
12楼:Carzy_x 发表于
cannot allocate an array of constant size 0 怎么回事啊 vc6.0& .c文件
13楼:那只撞地球的猪 发表于
大神还在吗 来的有点晚。我看不明白 &如果Snake[0]是蛇头的话 在移动的时候 为什么Snake[1]会变成蛇尾,而Snake[sum-1]却变成了紧跟着蛇头
14楼:那只撞地球的猪 发表于
大神还在吗 来的有点晚。我看不明白 &如果Snake[0]是蛇头的话 在移动的时候 为什么Snake[1]会变成蛇尾,而Snake[sum-1]却变成了紧跟着蛇头
15楼:IT技术学习者 发表于
if(sum == t)&//未吃到食物即蛇身移动哦&
&&&&for(i = 1; i & i++)&//要从蛇尾节点向前移动哦,前一个节点作为参照&
&如果未吃到食物&&&这个for循环不能执行啊&&& 求大神解释一下
开源从代码分享开始
Pluser的其它代码我记得有一个那种类似的小游戏,就是吃东西越吃之后,原先是小小的越吃越大越吃越长,那是什么游戏呀?_百度知道
我记得有一个那种类似的小游戏,就是吃东西越吃之后,原先是小小的越吃越大越吃越长,那是什么游戏呀?
我有更好的答案
球球大作战
是贪吃蛇吗
吞食鱼又叫大鱼吃小鱼。
为您推荐:
其他类似问题
小游戏的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。java 贪食蛇教程_图文_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
java 贪食蛇教程
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩21页未读,
定制HR最喜欢的简历
你可能喜欢20行js代码实现的贪吃蛇小游戏
转载 &更新时间:日 08:30:51 & 作者:Kongcheng.LC
曾经诺基亚的贪吃蛇风靡一时,在游戏匮乏的年代,用Java实现太难,现在网页制作20行代码就做成一个简单的demo了,下面这篇文章主要给大家介绍了利用20行js代码实现的贪吃蛇小游戏,需要的朋友可以参考借鉴,下面来一起看看吧。
最近在csdn上看到一位大神用20行代码就写出了一个贪吃蛇的小游戏,感觉被惊艳到了,就试着读了一下这段代码,阅读过程中不断为作者写法的巧妙而叫绝,其中我发现自己对运算符优先级和一些js的技巧不是很清楚,所以看完之后决定把思路分享出来,方便和我一样的小白学习。
我对代码稍稍做了些修改,并添加了一些注释,方便理解。
&!DOCTYPE html&
&html lang="en"&
&meta charset="UTF-8"&
&title&贪吃蛇重构&/title&
height: 100
margin: 0;
padding: 0;
justify-content:
align-items:
&canvas id="can" width="400" height="400" style="background-color: black"&对不起,您的浏览器不支持canvas&/canvas&
var snake = [41, 40],
//snake队列表示蛇身,初始节点存在但不显示
direction = 1,
//1表示向右,-1表示向左,20表示向下,-20表示向上
food = 43,
//食物的位置
//与下次移动的位置有关
box = document.getElementById('can').getContext('2d');
//从0到399表示box里[0~19]*[0~19]的所有节点,每20px一个节点
function draw(seat, color) {
box.fillStyle =
box.fillRect(seat % 20 *20 + 1, ~~(seat / 20) * 20 + 1, 18, 18);
//用color填充一个矩形,以前两个参数为x,y坐标,后两个参数为宽和高。
document.onkeydown = function(evt) {
//当键盘上下左右键摁下的时候改变direction
direction = snake[1] - snake[0] == (n = [-1, -20, 1, 20][(evt || event).keyCode - 37] || direction) ? direction :
!function() {
snake.unshift(n = snake[0] + direction);
//此时的n为下次蛇头出现的位置,n进入队列
if(snake.indexOf(n, 1) & 0 || n & 0 || n & 399 || direction == 1 && n % 20 == 0 || direction == -1 && n % 20 == 19) {
//if语句判断贪吃蛇是否撞到自己或者墙壁,碰到时返回,结束程序
return alert("GAME OVER!");
draw(n, "lime");
//画出蛇头下次出现的位置
if(n == food) {
//如果吃到食物时,产生一个蛇身以外的随机的点,不会去掉蛇尾
while (snake.indexOf(food = ~~(Math.random() * 400)) & 0);
draw(food, "yellow");
//没有吃到食物时正常移动,蛇尾出队列
draw(snake.pop(),"black");
setTimeout(arguments.callee, 150);
//每隔0.15秒执行函数一次,可以调节蛇的速度
首先,我们要知道做一个贪吃蛇最主要的是什么,是做出蛇活动的场所和如何使蛇动起来。
我们先看蛇活动的场所:
&!-- html --&
&canvas id="can" width="400" height="400" style="background-color: black"&
对不起,您的浏览器不支持canvas
&!-- js --&
box = document.getElementById('can').getContext('2d');
这是一个400px*400px的canvas,思路是以20px*20px为一个方格,组成20行20列的方阵,总共400格,然后绿色填充的格子表示蛇身,用黄色表示食物。这400个格子和数字0~399一一对应,对应的方式就是以20作为基数,n / 20再取整表示第几行,n % 20表示第几列。行数和列数都用0~19表示。
蛇用一个一维数组表示,每个值都是这400个数中的一个,用var snake = [41, 40];初始化这条蛇,索引0为蛇头。food表示食物的位置,direction表示蛇头下一次运动的转向。蛇的运动就用添加和删除数组元素来实现,每次执行绘制蛇头,去掉蛇尾,循环执行使蛇运动。
下边从函数运行的起始处(39行)开始看:
!function() {}();
什么鬼?这其实是立即执行函数IIFE的另一种写法。关于IIFE,这篇文章讲的挺不错的。继续往下看,给蛇头添加一个节点n,其值为当前蛇头的值加direction的值,如此一来就能理解为什么要用20表示向下,-20表示向上了。再下一行是一个if语句,其中值得提醒的是&&的优先级高于||,这个语句就是判断即将出现的蛇头是不是属于蛇身,或者跑到box外边去了。如果没有死亡,就把这个蛇头绘制出来,下边就看看绘制的代码:
function draw(seat, color) {
box.fillStyle =
box.fillRect(seat % 20 *20 + 1, ~~(seat / 20) * 20 + 1, 18, 18);
填充时填充18*18的像素,留1px边框。 .fillRect()中第一个参数就是要绘制的矩形的x坐标seat % 20 *20 + 1,即先得到所要绘制的矩形块在方阵中的位置:第~~(seat / 20)行,第seat % 20列,再* 20 + 1具体到像素点。可能这个~~有点难理解,我感觉在这里的用处应该和Math.floor()差不多,对一个浮点型的数取反再取反,得到的数就是去掉小数位的整数了。
回到47行,又是一个判断语句,判断下次蛇头出现的位置是不是和当前的食物的位置相同,如果相同,生成下一个食物,食物的位置为一个随机数,但是要判断这个点不是出现在当前的蛇身上,绘制食物。如果没有吃到食物,即蛇在正常运动时,每向前一次,将蛇尾弹出,并利用其返回值将这个点重新绘制为黑色。
最后的setTimeout,循环执行当前函数,设置执行周期来调蛇的移动速度。
到了这里,我们发现这条蛇已经可以动了,加上键盘的操作就完成了:
document.onkeydown = function(evt) {
direction = snake[1] - snake[0] == (n = [-1, -20, 1, 20][(evt || event).keyCode - 37] || direction) ? direction :
将这个函数绑定到键盘事件上,evt || event用法的原因这里有详细的解释,是为了兼容ie。
三目运算符?前边的判断语句又可分为两部分:
snake[1] - snake[0]的值应该就是-direction,按理说此处写成-direction应该和原来是一个效果,那为什么没有这么做呢,因为如果这样写,玩家可能在一个函数周期中多次改变direction的值,最后使得direction和当前真正的运动方向不一致,导致游戏崩溃。
在==后边, [-1, -20, 1, 20][(evt || event).keyCode - 37]中前边的[]是一个数组,后边的[]是取索引,左上右下四个键的keyCode分别为37, 38, 39, 40,计算后的索引为0, 1, 2, 3,使方向键与direction的取值对应起来。这里的巧妙之处在于如果按下的按键不是方向键,在数组中将得不到对应的值,返回undefine。此时,由于之后的||运算符,n会取到direction原来的值。
再用三目运算符来判断,如果按键方向不是反方向,就更新direction的值。
以上就是本篇的全部内容啦,虽然都是一些基础的东西,但是感觉还是挺好玩的。要是哪里理解的不对还希望指证出来,共同进步。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 贪吃蛇小游戏java 的文章

 

随机推荐