返学费网 > 培训机构 > 游戏设计交流中心

13081913316

全国统一学习专线 8:30-21:00

贪吃蛇游戏选题的目的和意义(含国内外相同领域、同类课题的研究现状分析)

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

3000多学生课间操玩真人版贪吃蛇,这样的活动有什么作用和意义?

我觉得让学生们进行这样的活动,意义主要有以下几个。

第一,放松学生们的心情。

现在学生们的压力实际上是非常大的,他们每天呢除了学习就是学习,睁开眼睛的第1件事情就是去上学,然后呢一直到很晚才能够睡觉,所以呢,现在学生的压力是非常大的,但是呢,学生有一个课间操就是为了让学生放松的。

但是由于学校里面的在课间通组织上面并不是很好,仅仅只是让学生们自由活动,或者让学生们跳一个广播体操,但这种方式往往不能够让学生们真正放松,只有在进行团队活动的时候才能够真正起到放松身心的作用,所以呢,这样的活动能够放松学生的心情,减轻学生的压力。

第二,可以增强班级凝聚力。

很多时候呢一个人他往往是历代世博的,但是如果每一个个人的组成一个团体,那么这个团体的力量是非常大的。但是那么多人在一个团体中,它往往是会有矛盾的或者往往有一些不好的东西,如果让这个团体能凝聚成一股绳,然后呢,去做同样的事情。

久而久之这样的话班级凝聚力会变强很多,班主任呢在考虑如何增加自己班级的凝聚力的时候,都会非常头疼,我觉得这是一个非常好的办法,就是让他们参加这样的活动,在活动中培养班级凝聚力,培养集体荣誉。

第三,增强学生们的娱乐能力。


现在学校呢,只顾培养孩子的计算能力,背诵能力等等一系列跟知识有关的能力,但是培养孩子的娱乐能力也是非常重要的,如果一个学生除了学习或者工作之外,什么事儿都不会往往他这个人是非常孤独和无聊的,他的社交能力是存在问题的,所以呢,参加这样的活动能够增强学生们的娱乐能力。

贪吃蛇开发的理论是什么?

贪吃蛇是一款经典的小游戏,开发贪吃蛇的理论主要是基于计算机图形学和计算机科学的相关知识。
具体来说,贪吃蛇的开发涉及到以下理论:
程序设计:开发者需要根据游戏的规则和操作方式,设计程序的逻辑和结构。
算法设计:开发者需要设计算法来实现蛇的运动、食物的生成、游戏难度的逐渐增加等功能。
图形学:开发者需要使用计算机图形学知识,绘制游戏中的蛇、食物、地图等元素,使其看起来更加逼真。
碰撞检测:开发者需要设计碰撞检测算法,判断蛇是否吃到了食物,或者是否与墙壁或自身相撞。
数据结构:开发者需要使用数据结构来存储和管理游戏中的各种元素,如蛇的身体、食物的位置、游戏得分等。
综上所述,贪吃蛇的开发涉及多个领域的知识,开发者需要将它们有机地结合起来,才能实现一个完整的游戏。

C语言课程设计 贪吃蛇

2.1程序功能介绍

贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。

2.2程序整体设计说明

一个游戏要有开始部分,运行部分,结束部分(实际上开始部分与运行部分是一体的)。

2.2.1设计思路

这个程序的关键是表示蛇的图形以及蛇的移动。用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时由于没有庆平的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来社会多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现和消失也是画矩形块和覆盖矩形块

2.2.2数据结构设计及用法说明

开始部分:

游戏是运行在图形模式下的,所以第一步一定是初始化图形模式,接着要有开始的界面,就像书有封面一样,我设置了一个游戏的标题画面,除了游戏标题画面我还设置了一个欢迎画面。标题画面以后,还要为游戏的运行部分作初始化,包括绘制游戏运行时的背景,对游戏某些重 要变量的初始化。

运行部分:

作为游戏的核心部分,这里包括的函数比较多,也就是模块比较多,首先让我模拟一下贪吃蛇的游戏模式:某个世界上突然出现一条蛇,它很短,它的运动神经异常,它没法停止自己的多动症在它的世界里就只有食物,它很饿,也很贪吃;同样在不明原因的情况下,食物从天而降,可惜的是没有落到嘴边;饥饿的主人公,不管它有没有毒,也不问食物的来历,径直向食物爬去;它吃到食物啦,它超出想象的同化能力让食物很快的成为自己身体的一部分,它的身子变长啦。当它吃到第一颗食物时,上帝有给它第二颗,于是它吃了第二颗,于是又变长了,于是又有第三颗……它的身子是一直的加长,它不管自己过长身体的麻烦——转身不便,继续吃下去,现在它是直接把巴张大,好让食物有个绿色通道。但是在某天的下午,它咬到了自己,它才想起自己是一条毒蛇,于是晕死过去(不是毒死);又或者它往食物冲锋的时候,它失去控制,撞到了墙上。

第一轮循环:第一步,出现食物;第二步,蛇不停运动;第三步,检查蛇是撞到自己或墙壁;由第四步起游戏有两条支线(A、B):

A :第四步,蛇没有碰到自己或墙壁,蛇继续前进,绘制蛇的动作;第五步,判断蛇是否吃到食物,如果蛇吃到食物,身子变长,原来的食物消失;第六步,让玩家输入控制指令,让蛇在下一轮循环的第二步改变运动方向;第七步,第二轮循环的第一步,重复第一轮的步骤;

B:第四步,蛇碰到自己或墙壁,终止游戏。

结束部分:

游戏结束时,显示“GAME OVER”,已经是约定俗成的规律了,我的游戏也不例外。除了游戏结束画面外,我还设置了一个游戏退出画面,“善始善终”嘛。

有了上述的大致划分,我把整个程序划分成(13+2)个模块(其实就是函数)

2.2.3程序结构(流程图)

图2.1流程图

依据所需要处理的任务要求,规划输入数据和输出结果,决定存放数据的数据结构。

C语言中数据结构集中体现在数据类型上,因此在进行C语言程序设计时,应统筹规划程序中所使用的变量,数组,指针等,以及它们的类型等。这点是很重要的,如果在此期间选择不合适的变量或者数组,将来修改就十分困难。

现在分析一下贪吃蛇游戏中的元素,继而得出与它们对应的在程序中的描述:

蛇:

基本描述:长度,颜色,位置。

对应数据与数据类型:长度—虽然可以用坐标表示,但是这样的话,运算量将很大,所以换算成较大的单位—节数,以固定长度的每节描述;坐标--整型;颜色--整型; 位置--X,Y坐标。

增加的描述:蛇运动的方向,蛇的生命。

对应数据与数据类型:这些描述是为了与程序的按键的输入部分与判断游戏结束部分相联系而设的。方向只有四个方向:上下左右。可以设置与之对应的四个整型数:3、4、2、1。生命就只有两种情况:死或生,对应0或1。

食物:

基本描述:颜色,位置。

对应数据与数据类型:由于颜色设成固定的,所以不再讨论。位置—X、Y坐标。

增加的描述:食物的存在。

对应数据与数据类型:这是为了避免重复出现食物而设置的,与绘制食物的函数有联系。只有两个值:0或1(没有食物或有食物)

其他的元素:墙,由于它在显示上是作为背景而存在的,所以并没有什么说明实际的墙壁就是四条直线组成的边框,由坐标描述。

还需要的变量:键盘键入的键值(作为全局变量,整型);经常要使用的循环变量;自定义的填充图案;说明文字的字符数组;游戏的记分;游戏的速度(蛇的速度)。

图2.2蛇的不停运动的关键算法的流程图

2.2.4各模块的功能及程序说明

主要模块的实现思路和算法的流程图说明:

关键所在——蛇不停移动的Snakemove():

蛇的不停移动,就是蛇的下一节取代前一节的位置,在计算机中就是蛇下一节的位置坐标变成前一节的位置坐标。在上文中,已定义蛇的位置坐标为数组类型,一组坐标对应一节的位置,假设有i+1节,由0到i节,第i节的坐标取第i-1节的坐标,第i-1节的坐标取第i-2节的坐标……直到第1节取第0节的坐标。而第0节的坐标,即蛇头的坐标要往某个方向变化,变化量为蛇每节的长度。蛇的这种坐标轮换需要循环语句使其继续下去。

2.2.5程序结果

运行程序得到如下初始界面图:

图2.3程序结果图

用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示:

图2.4程序结果图

蛇没有碰到自己或墙壁,蛇继续前进:

图2.5程序结果图

游戏结束时,显示“GAME OVER”

图2.6程序结果图

2.3程序源代码及注释

#define N 200

#include <graphics.h>

#include <stdlib.h>

#include <dos.h>

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

int i,key;

int score=0;/*得分*/

int gamespeed=50000;/*游戏速度自己调整*/

struct Food{

int x;/*食物的横坐标*/

int y;/*食物的纵坐标*/

int yes;/*判断是否要出现食物的变量*/

}food;/*食物的结构体*/

struct Snake{

int x[N];

int y[N];

int node;/*蛇的节数*/

int direction;/*蛇移动方向*/

int life;/* 蛇的生命,0活着,1死亡*/

}snake;

void Init(void);/*图形驱动*/

void Close(void);/*图形结束*/

void DrawK(void);/*开始画面*/

void GameOver(void);/*结束游戏*/

void GamePlay(void);/*玩游戏具体过程*/

void PrScore(void);/*输出成绩*/

/*主函数*/

void main(void){

Init();/*图形驱动*/

DrawK();/*开始画面*/

GamePlay();/*玩游戏具体过程*/

Close();/*图形结束*/}

/*图形驱动*/

void Init(void){

int gd=DETECT,gm;

(EGAVGA_driver);

initgraph(&gd,&gm,"c:\\program files\\winyes\\tc20h\\bgi");

();}

/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/

void DrawK(void){

/*();*/

setcolor(11);

(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/

for(i=50;i<=600;i+=10)/*画围墙*/   {

rectangle(i,40,i+10,49); /*上边*/

rectangle(i,451,i+10,460);/*下边*/   }

for(i=40;i<=450;i+=10)  {

rectangle(50,i,59,i+10); /*左边*/

rectangle(601,i,610,i+10);/*右边*/ }}

/*玩游戏具体过程*/

void GamePlay(void){

randomize();/*随机数发生器*/

food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/

snake.life=0;/*活着*/

snake.direction=1;/*方向往右*/

snake.x[0]=100;snake.y[0]=100;/*蛇头*/

snake.x[1]=110;snake.y[1]=100;

snake.node=2;/*节数*/

PrScore();/*输出得分*/

while(1)/*可以重复玩游戏,压ESC键结束*/   {

while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/      {

if(food.yes==1)/*需要出现新食物*/     {

food.x=rand()%400+60;

food.y=rand()%350+60;

while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/

food.x++;

while(food.y%10!=0)

food.y++;

food.yes=0;/*画面上有食物了*/     }

if(food.yes==0)/*画面上有食物了就要显示*/     {

setcolor(GREEN);

rectangle(food.x,food.y,food.x+10,food.y-10);     }

for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/         {

snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1];     }

/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/

switch(snake.direction)     {

case 1:snake.x[0]+=10;break;

case 2: snake.x[0]-=10;break;

case 3: snake.y[0]-=10;break;

case 4: snake.y[0]+=10;break;     }

for(i=3;i<snake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/     {

if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])        {

GameOver();/*显示失败*/

snake.life=1;

break;        }        }

if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||

snake.y[0]>455)/*蛇是否撞到墙壁*/    {

GameOver();/*本次游戏结束*/

snake.life=1; /*蛇死*/    }

if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/

break;

if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/    {

setcolor(0);/*把画面上的食物东西去掉*/

rectangle(food.x,food.y,food.x+10,food.y-10);

snake.x[snake.node]=-20;snake.y[snake.node]=-20;

/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/

snake.node++;/*蛇的身体长一节*/

food.yes=1;/*画面上需要出现新的食物*/

score+=10;

PrScore();/*输出新得分*/    }

setcolor(4);/*画出蛇*/

for(i=0;i<snake.node;i++)

rectangle(snake.x[i],snake.y[i],snake.x[i]+10,

snake.y[i]-10);

delay(gamespeed);

setcolor(0);/*用黑色去除蛇的的最后一节*/

rectangle(snake.x[snake.node-1],snake.y[snake.node-1],

snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);     }  /*endwhile(!kbhit)*/

if(snake.life==1)/*如果蛇死就跳出循环*/

break;

key=bioskey(0);/*接收按键*/

if(key==ESC)/*按ESC键退出*/

break;

else

if(key==UP&&snake.direction!=4)

/*判断是否往相反的方向移动*/

snake.direction=3;

else

if(key==RIGHT&&snake.direction!=2)

snake.direction=1;

else

if(key==LEFT&&snake.direction!=1)

snake.direction=2;

else

if(key==DOWN&&snake.direction!=3)

snake.direction=4;

}/*endwhile(1)*/}

/*游戏结束*/

void GameOver(void){

();

PrScore();

setcolor(RED);

(0,0,4);

outtextxy(200,200,"GAME OVER");

getch();}

/*输出成绩*/

void PrScore(void){

char str[10];

(SOLID_FILL,YELLOW);

bar(50,15,220,35);

setcolor(6);

(0,0,2);

sprintf(str,"score:%d",score);

outtextxy(55,20,str);}

/*图形结束*/

void Close(void){

getch();

();

}

苹果、围墙与主义:一条贪吃蛇的 21 种哲学困境

某天网上冲浪?,发现一款叫做 Snakisms 的贪吃蛇变种游戏。对于一个好久不玩游戏的人来说,这款游戏让我沉迷了好一会儿,也折磨了我好一会儿。回想一下上一次玩贪吃蛇,好像还是在诺基亚手机上。
有趣的是,这个贪吃蛇游戏有 21 种不同的模式,每种模式都内置了一种「主义」(-ism)。在这 21 种不同主义信仰下的平行宇宙里,这条贪吃蛇坚强地活着。

《旧约 · 创世纪》里讲到蛇引诱夏娃去吃了生命之树上的果子,从此有了智慧开了眼,却引来被逐出伊甸园的下场。而蛇被诅咒用肚皮走路并终生吃土。

后来,人类为了纪念这条蛇,发明了贪吃蛇游戏。

贪吃蛇游戏里有 4 个最明显的元素:苹果(apple)、围墙(walls)、蛇(snake)、玩家(player)。但是,很多时候我们都忘记了还有一个游戏设计里最重要最隐藏的元素:动机(motive)。很多游戏我们在玩儿的时候觉得理所当然,其实每个游戏背后的动机都非常值得推敲。

与此类似,在现实生活中,我们每个人可能都有一套自己的生活「哲学」,也有些人信仰宗教,也有些人坚持某种主义。这些哲学/主义/信仰不知不觉在暗中塑造了我们的世界,你在其中的心理和行为很大程度上都受到它们的影响。

游戏作者 Pippin Barr 在这款游戏的简介里写到:

好,少废话,下面就让我带你一起玩玩这 21 种不同「信仰」模式下的贪吃蛇游戏。看看其中有没有你信仰的「主义」,也看看这些主义让这条贪吃蛇陷入到了怎样的哲学困境中:

  拟人论

在这个模式下,苹果和蛇是一样会动的。能不能吃到苹果,要看你的技术,也要看你的运气。

  末日论/降临派
是的,在这个模式下,你玩着玩着,世界就毁灭了。
  禁欲主义

这个模式下,只要不吃苹果,你的得分会一直增加。但是,如果你控制不住自己的欲望想要吃苹果,分数立刻归零且死去。

  资本主义

打开这个模式,你的账户里有 $ 50,吃一个苹果减少 $ 10,很快你就吃不起苹果了。

Casualism  偶然论/随机论
这个模式一打开,眼花缭乱。好随机。好偶然。

  保守主义

这个模式,就是最传统的贪吃蛇游戏。

  决定论

这个模式下,你无法控制游戏。系统在支配着贪吃蛇吃苹果。

Dualism  二元论

这个下,有两个状态贪吃蛇,一个是贪吃蛇的 mind,一个是贪吃蛇的 body。你要手动控制贪吃蛇的 body,还要用你自己的 mind 去控制贪吃蛇的 mind。

  存在主义

打开这个模式,就是这样的:

还记不记得《黑客帝国》里,让 Neo 迷失的那个地铁站?

Holism  整体论

在这个模式下,大家全都一起动!(嗨起来!)

Idealism  唯心主义

打开这个模式,想象一下你正在玩贪吃蛇游戏...

Monism  一元论

进入这个模式,你什么都可以吃。

  自我崇拜

进入这个模式,其实就是最传统的贪吃蛇游戏。但是...

但是游戏结束的时候,系统会自动发一封赞美的邮件给游戏的制作者...

Nihilism

虚无主义

打开这个模式,就是一片黑屏的虚无。按什么键都没用,要返回游戏菜单,你需要刷新网页。

虚无。

Optimism

乐观主义
这个模式下,围墙里的苹果会越来越多,多到你根本吃不完。

但是,贪吃蛇永远都长不大。

Pessimism

悲观主义
打开这个模式,你会看到围墙变得狭小,而苹果又在墙外。

  实证主义

打开整个模式,你只能看到前进方向的围墙,苹果也不知道在哪个方向。另外,你永远也看不到自己的尾巴。
Post-  后末世主义

打开整个模式,就是贪吃蛇世界末日之后的废墟,散落的围墙砖块,不见踪影的苹果,行动变得艰难,维持生存成了首要目的。
  浪漫主义
打开整个模式,贪吃蛇每吃一个苹果,屏幕就会闪现一句情话,主题是:你为什么把我无情的留在这里惩罚我,我不能没有你。到最终贪吃蛇撞墙死去,它终于得到了救赎,可以和它心爱的人永远在一起了。

Stoicism  斯多葛主义

在这个模式下,贪吃蛇撞到墙不会死,咬到自己不会死。游戏可以一直进行下去。

一条坚韧的贪吃蛇。

  功利主义

在这个模式下,贪吃蛇只有两条行动路径。一条路径上有 5 个苹果,另一条路径上只有 1 个。

嗯,贪吃蛇界的“电车难题”。

当然,除了游戏中的这 21 种信仰/主义/哲学,我们的这个世界上还同时存在着成千上万种的主义哲学,一个人甚至也可以同时拥有多种信仰。

游戏是另一种「真实」,角色,场景,动机设置构成的综合体验,让我们在游戏里寻找着特定的意义。

如果把你的一生看成一场游戏,或许采取什么游戏策略并不重要,因为你了怎样的信仰,你就给自己构建了一个怎样的世界。而在这个世界里,你所做的一切好像都是理所当然。

如果你对这个游戏中的 21 种主义或哲学思想有兴趣的话,可以自己去找资料来看看。

但是我的建议是: Don't do that. 每个都是坑,爬不上来的坑。

另外,如果你是经典游戏爱好者,也可以玩一玩作者开发的其他两款经典游戏变种:
PONGS:

BREAKSOUT:

Life is .

Have fun! 

毕设写贪吃蛇能过吗

能。
1、贪吃蛇简单些,而且可扩展的不少,方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。
2、在这个游戏设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用c语言的图形库函数。
3、在设计开发过程中,要对c语言的图形库函数有一定的了解,利用图形库函数实现一些功能。

贪吃蛇,俄罗斯方块的来历,背景??

这一人们喜闻乐见的游戏成功的秘诀,在于抓住了我们重复排列与使用的心理乐趣。
几何图形从屏幕上方缓缓降落,你要做的就是控制其降落方式,并与其他图形排列消除。游戏的初衷很简单,但加上了令人上瘾的背景电子音乐后(据说来自俄罗斯民谣),人们的娱乐生活发生了翻天覆地的变化。
自从1986年俄罗斯方块问世后,这一简单的游戏耗去了玩家数百万个小时。从那时起,从《使命召唤》到《魔兽世界》,游戏操纵平台的外观和性能都在茁壮发展。但像俄罗斯方块这样的方块益智类游戏,始终占据了我们心中的一席之地。为何它们如此经久不衰呢?
作家杰弗里·戈德史密斯是沉迷于俄罗斯方块不能自拔,乃至于他写了一篇著名的文章,文中提到俄罗斯方块的发明者阿里克谢·帕吉诺特夫,是否发明了一种“瘾药”——让人可以玩出瘾。
一些人说自己连玩了几小时俄罗斯方块后,连梦里都会出现降落的方块,还有看街上的大楼都在移动——这是一种名为“俄罗斯方块效应”的现象。这是游戏产生的心理推动作用,还有建议称那些患有创伤后精神紧张性障碍的人们,需要预防游戏产生的幻觉重现。
当我十几岁的时候,也有过一段俄罗斯方块沉迷期,我花了很多时间在方块的排列组合上。最近,我开始反思为什么俄罗斯方块这类游戏能够长青。说说我的结论吧,植根人们心中的心理驱使作用,是整理这些方块的关键。
很多游戏的宗旨大体都是整理消除。落袋台球(snooker)就是典型的例子(对于非英国人来说叫做pool)。第一个人把球打乱后,其他人依照不同规则轮流将球射入落袋里。俄罗斯方块在这一基本框架中,加入了电脑控制的成分——不光是玩家要整理方块,电脑还会不断从上方扔下额外的方块来制造凌乱。游戏看起来就是整一个漫无目的的过程,完全没有寓教于乐的成分在内,也没有深远的社交或是心理意义,但是我们却意外地为此着迷。
这当中存在着一种名为“蔡加尼克效应”的典型心理现象,命名自俄罗斯心理学家布鲁玛·蔡加尼克。19世纪30年代,蔡加尼克在一家人来人往的咖啡馆里,发现服务员的记忆力都很惊人——但是只能保持到餐点送到为止。他们能记住一桌12人点的东西,不过一旦食物和饮料上桌后他们立马忘得一干二净,也回想不起之前稳固的记忆。蔡加尼克将这种把未完成的任务坚持保留在记忆中的现象,以自己的名字命名。
蔡加尼克效应也是智力节目如此受欢迎的原因之一。你可能不关心英国广播公司是在几几年成立的,或者全球至少有一家麦当劳的占了多少,但是一旦出了这样的问题,不知道答案居然就会浑身不舒服(顺便答案是1927年和61%)。问题在被解答前一直会缭绕在脑海中。
游戏原理
俄罗斯方块通过不断创建任务而牢牢抓住我们的神经。
游戏中的每个环节都引领者我们解决谜团,排成或完成一列后图形会消失,但是新的也在不断出现,周而复始。部分解决与新形成的任务链用来打发时间很方便,反复的满足与焦虑感填满了每时每刻。
另一个俄罗斯方块风靡的原因在于,未完成的任务与潜在的解决方法并存——徐徐降临的每一种方块都有各自的安插方式。
俄罗斯方块是一个简单的可视世界,通过操纵五个按键(当然是向左、向右、左转、右转和降落)能够迅速地得出解决方案。对俄罗斯方块玩家的研究结果显示,人们普遍喜欢通过旋转方块来看它们是否匹配,而不是一边看着方便降落一边思考。当然这两种方法都可行,但在俄罗斯方块的世界里永远是动作领先——这是吸引人的关键。和生活中不太相同的是,俄罗斯方块将我们处理问题时的所见所想直接联系到了一起,我们能立即对问题采取行动。
蔡加尼克效应是对一种现象的形容,但它无法解释起因和作用。这是心理学家常用的把戏,看似他们通过命名而解开了人类的难解之谜,其实他们所做的仅仅是贪心地用自己的名字命名,而根本没解决问题。对这一现实的合理解释是,大脑回路在达成目标的过程中会重组。如果这一目的达成,思路就会转移到其他事物上。
益智游戏利用心理达标原理,不断挫败我们直至我们满意。俄罗斯方块则更进一步在失败与成功之间创建了持续的链条。正如聪明的寄生虫一般,俄罗斯方块善于利用人们完成与再使用的心理乐趣。
我们一边玩着一边短暂地陶醉于排列方块的乐趣中,哪怕我们人格中理智与成熟的部分明白,这基本上是个毫无意义的.

利用解释型语言编写的贪吃蛇程序什么意思

用C语言来实现也是一个好玩的事情。这个游戏我写完后放在知乎,竟然点赞的人数超级多。我觉得大家喜欢,一个方面是因为写得简单,大家都能看得懂,一个可扩展性还是非常强的。
我试了说一下这个代码 核心的三个函数
menu();
setup();
draw();
menu用来设置菜单,也就是我们一运行看到的那个。setup用来设置参数,我们需要设置高度和宽度,还有分数,食物的位置。draw也就是画,也就是画整个画面。
还有一个枚举类型 这个结构体用来设置蛇的几个状态,我觉得这个也是面向对象编程的一个思想,把蛇的状态都封装成一个枚举类型。
typedef enum
{
STOP = 0,
LEFT,
RIGHT,
UP,
DOWN
}Direction;
还有
/*判断贪吃蛇的长度*/
void logic()
这个函数,这个函数应该是整个贪吃蛇的精髓了,要理解代码怎么把蛇给连接起来。用了点巧妙的东西。
来看这里面的关键代码
/*把上一个位置记下*/
int lastX = tailX[0];
int lastY = tailY[0];
int last2X, last2Y;
/*重新获取当前的位置*/
tailX[0]=x;
tailY[0]=y;
int i=0;
/*遍历整条蛇的长度 把 0 的位置空出来,其余蛇的位置往后面的空间移动*/
for(i=1; i ntail;i++)
{
last2X = tailX[i];
last2Y = tailY[i];
tailX[i]=lastX;
tailY[i]=lastY;
lastX = last2X;
lastY = last2Y;
}
lastX lastY 用来存上一次的蛇头的位置。后面的 for 循环,通过tail 蛇的长度,把蛇上个状态给保存到数组tailX tailY里面。
完整代码
#include stdio.h
#include stdlib.h
#include stdbool.h
#include Windows.h
#include time.h
#include conio.h /*键盘输入获取*/
bool gameOver;
bool stop = false;
bool hit = false;
/*游戏的边框大小*/
const int width = 50;
const int height = 20;
/*蛇的坐标,食物的坐标还有分数*/
int x,y,fruitX,fruitY,score;
/*蛇每个点的坐标*/
int tailX[200],tailY[200];
/*蛇的默认长度*/
int ntail=3;
typedef enum
{
STOP = 0,
LEFT,
RIGHT,
UP,
DOWN
}Direction;
Direction Dir;
/*开始菜单*/
void menu()
{
int a;
printf( ------------------------------------------------------------------\n
printf( | 贪吃蛇游戏 |\n
printf( | 1) 新游戏 |\n
printf( | 2) 开始边界 |\n
printf( | 3) 退出游戏 |\n
printf( ------------------------------------------------------------------\n
printf( ---- 请输入你的选择:
scanf( %d ,
}
/*初始化状态*/
void setup()
{
gameOver = false;
/*根据当前时间设置“随机数种子”*/
srand(time(NULL));
Dir = STOP;
/*贪吃蛇的位置,固定在中间*/
x= width/2;
y= height/2;
/*食物的位置,位置是随机的*/
fruitX = rand()%width;
fruitY = rand()%height;
score = 0;
}
/*绘制界面*/
void draw()
{
if(stop == true)
{
return;
}
system( cls /*清除屏幕*/
printf( 分数:%d ,score);
printf( \n
/*第一行*/
int i;
for(i= 0 ;i width+1;i++)
{
printf( -
}
printf( \n
/*画中间的画面*/
int p;
for(p= 0 ;p height;p++)/*高度*/
{
int q;
for(q= 0 ;q width;q++)/*宽度*/
{
/*第一行最后已给字符*/
if(q==0 || q==width-1)
{
printf( |
}
if(p == fruitY q == fruitX)/*食物的随机坐标*/
{
printf( O
}
else
{
int k=0;
bool print = false;
/*贪吃蛇的长度 默认长度是 3*/
for(k=0;k ntail;k++)
{
if(tailX[k]==q tailY[k]==p)
{
printf( *
print = true;
}
}
/*如果这个位置打印了 * 就不要打印空格了*/
if(!print)
{
printf(
}
}
}
printf( \n
}
/*最后一行*/
int j;
for(j= 0 ;j width+1;j++)
{
printf( -
}
}
/*按键输入控制*/
void input()
{
if(_kbhit())
{
/*获取键盘的输入字符*/
switch(_getch())
{
case 4 :
case 75:/*左键*/
Dir = LEFT;
hit= true;
break;
case 8 :
case 72:/*上键*/
Dir = UP;
hit= true;
break;
case 6 :
case 77:/*右键*/
Dir = RIGHT;
hit= true;
break;
case 2 :
case 80:/*向下键盘键 */
Dir = DOWN;
hit= true;
break;
case x :
case 27:/*ESE*/
gameOver = true;
break;
case 32:/*空格 暂停键*/
stop = !stop;
break;
}
}
else if(!hit stop == false)/*如果没有改变方向*/
{
x++;
}
}
/*判断贪吃蛇的长度*/
void logic()
{
if(stop == true)
{
return;
}
/*把上一个位置记下*/
int lastX = tailX[0];
int lastY = tailY[0];
int last2X, last2Y;
/*重新获取当前的位置*/
tailX[0]=x;
tailY[0]=y;
int i=0;
/*遍历整条蛇的长度 把 0 的位置空出来,其余蛇的位置往后面的空间移动*/
for(i=1; i ntail;i++)
{
last2X = tailX[i];
last2Y = tailY[i];
tailX[i]=lastX;
tailY[i]=lastY;
lastX = last2X;
lastY = last2Y;
}
/*根据方向来改变x y 的值*/
switch(Dir)
{
case UP:
y--;
break;
case DOWN:
y++;
break;
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
}
if(x 0 || width x || y 0 || height y)
{
gameOver = true;
/*清除屏幕*/
system( cls
printf( ------------------------------------------------------------------\n
printf( | |\n
printf( | |\n
printf( | 游戏结束 |\n
printf( | |\n
printf( | |\n
printf( ------------------------------------------------------------------\n
}
if(x==fruitX y==fruitY)
{
/*吃了一个食物,蛇的长度增加1*/
ntail++;
score+=10;
/*更新下一个食物的位置*/
fruitX = rand()%width;
fruitY = rand()%height;
}
}
int main()
{
#if 0
while(1)
{
printf( %d\n ,_getch());
}
#endif
menu();
setup();
draw();
/*循环画贪吃蛇的界面*/
while(!gameOver)
{
draw();
input();
logic();
Sleep(70);
}
return 0;
}
上面这段代码直接在Dev C++上面应该是可以运行的,很多人在知乎上私信问我,为什么我的贪吃蛇执行不了呢,可能就是平台不同,少了这个头文件,少了那个头文件,但是你为什么不能跟我一样,用Dev C++呢,轻量级,简单。代码的精髓是什么?我认为精髓一定是思想,不是你写了多少行代码,用了什么高端的IDE。
我自认为我的注释已经写得不错了,所以就没有什么好说明的了吧,有不明白的把代码过一下,至于屏幕刷新这个东西,如果只是用时间刷新就会闪屏,所以出现了一个双缓存,把要显示的东西送到一个buff里面去,另一个buff用来显示,这样就可以保证不会出现闪屏。除了写贪吃蛇,可以用这个方法写其他小程序,挺有意思的。
在知乎上,发起了一个C语言 100 行代码之内实现贪吃蛇的问题。我觉得很不错,里面很多同学的回复都非常赞,特别是叶大神的回复。
.png
学习C/C++编程知识,想要成为一个更加优秀的程序员,或者你学习C/C++的时候有难度,可以来UP主页的C++编程学习圈,里面不仅有学习视频和文件资料,还有更多志同道合的朋友,欢迎初学者和想转行的朋友,和大家一起交流成长会比自己琢磨更快哦! UP也上传了一些C/C++学习的视频教程和C语言基础教程,有兴趣的小伙伴可以看看~ 谢谢阅读!
文章知识点与官方知识档案匹配
C技能树首页概览
115488 人正在系统学习中
点击阅读全文
打开CSDN APP,看更多技术内容
C语言之出圈游戏(详解)
PTA7-5 出圈游戏 用指针实现以下功能:有n个人围成一个圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。 (1)编程提示 每三个人离开,置为0;当数到最后一个人时,将指针重新指向第一个人;m表示离开的人数,当m=n-1时,说明只剩下一个人,循环结束。 输入样例: 10 输出样例: 4 上面是题目的要求。 本小白的思路是让n个人形成一个一维数组,每次判断该人是不是要离开, 如果离开,这就不添加到这个一维数组里,并记录下来离开的人数,否则,就在数组里加上这
继续访问
9718 整数因子分解(优先做)
9718 整数因子分解(优先做)输入格式输出格式输入样例输出样例 时间限制:1000MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC;VC 大于1的正整数 n 都可以分解为 n = x1 * x2 * … * xm, 每个xi为大于1的因子,即1<xi<=n 。 例如:当n=12时,共有8种不同的分解式: 12 = 12 12 = 62 12 = 43 12 = 34 12 = 322 12 =
继续访问
【C语言】链表——圈中游戏问题(数到3退出)
问题描述: 有n个人围成一圈,从第1个人开始报数1、2、3,每报到3的人退出圈子。使用链表找出最后留下的人。
继续访问
套圈游戏c语言程序设计教程课后答案,概率统计习题带答案
概率论与数理统计习题及题解沈志军 盛子宁第一章 概率论的基本概念1.设事件B A ,及B A 的概率分别为q p ,及r ,试求)(),(),(B A P B A P AB P 及)(AB P2.若C B A ,,相互独立,试证明:C B A ,,亦必相互独立。3.试验E 为掷2颗骰子观察出现的点数。每种结果以),(21x x 记之,其中21,x x 分别表示第一颗、第二颗骰子的点数。设事件}10...
继续访问
c语言贪吃蛇设计意义,C语言贪吃蛇设计理念.pdf
基于C语言的 “贪吃蛇”游戏的设计与实现摘3.功能描述 本游戏主要实现以下几种功能:“贪吃蛇”游戏贪 游 游吃 戏 戏蛇 显 分的 ...
继续访问
热门推荐 一个好玩的小游戏(纯C语言编写)
最近在看知乎是发现了一个这一个专栏 从中获取的许多知识,本文中的游戏也是从里面学到的,不过本人又自己加了一些功能。 这是一个类似于飞机大战的游戏,不过目前代码量比较小,所以看起来非常简陋游戏界面如下 更新日志,本人将原来的原来的代码有进一步的优化了一下,之前是只有一个非常小的战机现在更新后可以产生一个非常大的战机(看起来也更
继续访问
如何用C语言实现圈叉游戏(-)
今天情人节,还是在学习C语言 自己写了一遍发现自己写的没有书上的代码更简练 就把书上的代码稍微修改了一下 下面看游戏界面 和昨天的米字棋差不多,有时间会结合米字旗的代码做些修改
继续访问
C语言:围圈报数游戏
游戏规则:有N个人围成一圈,顺序排号,从第一个人开始1到D报数,,凡报到D的人退出圈子(下场),问最后留下来的是原来的第几号? 逻辑思想:用布尔数组记下每个人的上场状态,1为上场,0为下场,开始游戏后每D个状态为1的人将状态改为0(即下场),重复下场动作N-1次后可知剩下一人,遍历数组找出剩下的状态为1的人即可。 代码如下: #include<stdio.h> #define N 1000 //参与的总人数 #define D 3 //每D个人报数下场 int main() { /
继续访问
数圈圈
26个大写字母里面,有一部分字母是带有圈的,比如A有1个圈,B有2个圈,C没有圈, 给你一个带有n个大写字母组成的字符串,请问一共有多少个圈圈。 你可以将字母中完全封闭的一个区域当作一个圈 输入描述: 第一行输入一个整数t,代表有t组测试数据, 对于每组测试数据, 第一行输入一个整数n代表字符串的长度, 第二行输入一个长度为n的字符串S,保证只由大写字母组成。 1<=t<=10 1<=n<=1*10^5 输出描述: 对于每组测试数据,输出一个整数代表这个字符串共有多少个圈圈。 并且对
继续访问
C语言围圈游戏
玩游戏,一共 N( 1≤N≤1000 )个人围成一圈,从某个人起顺时针顺序编号为 1 ~ N 号。 游戏只能有一个人赢,船长让大家数数,从编号为 1 的人开始顺时针报数,每轮从 1 报到 M 号( 1≤ M ),凡报到 M 的人视为出局,接着又从紧邻的下一个人开始同样的报数(紧邻的下一个人又报 1 )。 依次输入人数 N ,和报数规则的末数 M ,中间隔一个空格。输出能赢的相应编号R。 #include<stdio.h> int main() {...
继续访问
圈中游戏
有n个人围成一圈,从第1个人开始报数1、2、3,每报到3的人退出圈子。编程使用链表找出最后留下的人。 bug版本 #include <stdio.h> #include <stdlib.h> struct player { long num; struct player *next; }; typedef struct player NODE; NODE *create(int n) { NODE *head, *tail, *p; int i =
继续访问
c语言圈中的游戏,C语言实现扫雷游戏
本文将介绍如何用C语言多文件编程实现扫雷该示例扫雷程序可实现以下几个功能:自定义雷数踩雷后会将所有雷显示出来地图大小易修改Mine_clearance.h#pragma once#define _CRT_SECURE_NO_WARNINGS#include#include#include#define ROW 11#define COL 11#define 踩雷 0#define 玩家胜利 1in...
继续访问
c语言程序设计求各位数之和,C语言for回圈设计输入一个正整数,求它的各位数字之和及位数 例如234的各位数之和为9 位数是3...
C语言for回圈设计输入一个正整数,求它的各位数字之和及位数 例如234的各位数之和为9 位数是3以下文字资料是由(历史新知网www..com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!C语言for回圈设计输入一个正整数,求它的各位数字之和及位数 例如234的各位数之和为9 位数是3同意二楼,但得改一下# main(int argc, ch...
继续访问
c语言draw函数使用实例,使用函数实现两个数的交换(C语言)
<>题目:使用函数实现两个数的代码<>常规思路:定义函数,调用函数,完成交换。你的代码是否和下面一样呢?#include #include void Swap(int a,int b) { int tmp = a; a =b; b = tmp; } int main() { int x = 10; int y = 20; Swap(x,y); printf("%d %d\n...
继续访问
圈中的游戏 c语言,圈叉棋小游戏的简单实现代码
该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include int game[3][3]={0};void Show(int turn,int x,int y){int i=0,j=0;if(x>0 && y>0){if(turn%2){game[x-1][y-1]=1;}else{game[x-1][y-1]=-1;}}for(i=0;i<3;++i){for...
继续访问
c语言圈中的游戏,圈叉棋小游戏的简单实现代码
该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include int game[3][3]={0};void Show(int turn,int x,int y){int i=0,j=0;if(x>0 && y>0){if(turn%2){game[x-1][y-1]=1;}else{game[x-1][y-1]=-1;}}for(i=0;i<3;++i){for...

贪吃蛇幼儿园体育游戏设计

【游戏名称】:

贪吃蛇

【游戏目标】:

1、幼儿排成一队一个跟着一个走

2、在行走的过程中不碰到障碍物,锻炼幼儿身体的灵敏度

【游戏玩法】:

在宽阔的场地随意摆放障碍物(比如用废弃的'礼品盒),请参加游戏的小朋友分散站到场地中,幼儿分成两组游戏。请两名名小朋友当蛇头绕着障碍走,遇到场地中的小朋友轻轻摸下头,被摸头的小朋友随即跟到蛇头后面,继续绕障碍物走,直至将所有的小朋友邀请到队伍中来走出场地一队为胜。

【游戏规则】:

1、幼儿要一个跟着一个走(或是抓住前面幼儿的衣服下摆)不能掉队

2、行走过程中不能碰到障碍物,蛇头不能碰到蛇身、蛇尾,碰到者将退出队伍回到场地,等待再次蛇头邀请

3、每组的蛇头要将自己组的小朋友都邀请进队伍才能出场地

贪吃蛇的历史,背景等相关问题

蛇引诱夏娃吃了苹果之后,就被贬为毒虫,阴险的象征。
而蛇吃东西是整只动物吞进去的,大概在文艺复兴的时候(好象是那个时候但是不确定)就有人发明的一种游戏,是现在贪吃蛇的前身。后来慢慢的发展就变成了今天的贪吃蛇了。
蛇引诱夏娃吃了苹果之后,就被贬为毒虫,阴险的象征。
而蛇吃东西是整只动物吞进去的,大概在文艺复兴的时候(好象是那个时候但是不确定)就有人发明的一种游戏,是现在贪吃蛇的前身。后来慢慢的发展就变成了今天的贪吃蛇
贪吃蛇游戏背景
温馨提示:为不影响您的学业,来校区前请先电话咨询,方便我校安排相关的专业老师为您解答
  • 作者最新文章
  • 在线报名
申请试听课程

只要一个电话
我们免费为您回电

姓名不能为空
手机号格式错误