程序为 参考他人的思想,自己独自完成的 《贪食蛇》程序。虽然写的很烂,但想想好歹是自己第一个真正意义上的C++程序。特别纪念一下,激励一下自己
1.my_snack.h
#ifndef MY_SNAKE_H_
#define MY_SNAKE_H_
#define UP 1001
#define DOWN 1002
#define LEFT 1003
#define RIGHT 1004
#define Hlenth 25 //水平方向
#define Vlenth 25 //竖直方向
#define Time 10000
typedef struct Snode
{
int x;
int y;
Snode *last;
Snode *next;//指向下一个节点
}Snode,*SnodeLnk;
class Snack
{
private:
SnodeLnk head;
int fx;
int fy;
int count;
int point;
public:
Snack();
~Snack();
void print();
void delay();
void add_head();
void del_last();
void eat_food();
void move();
void jud_die();
void food();
void key_move(char ch);
};
#endif
2. my_snack.cpp
#include <iostream>
#include <ctime>
#include "my_snake.h"
using namespace std;
int area[Hlenth][Vlenth]={0};
Snack::Snack()//起点(10,10)
{
int i;
point=RIGHT;
head=new Snode;
head->x=9;
head->y=8;
head->next=NULL;
head->last=NULL;
//fx=9;//测试
//fy=13;
//area[fx][fy]=1;
add_head();
add_head();
add_head();
add_head();
add_head();
add_head();
//meset() 数组为0
for (i=0;i<Hlenth;i++)
{
area[0][i]=1;
area[Vlenth-1][i]=1;
}
for (i=0;i<Vlenth;i++)
{
area[i][0]=1;
area[i][Hlenth-1]=1;
}
}
Snack::~Snack()
{
SnodeLnk p=NULL;
while (head)
{
p=head;
head=head->next;
delete p;
}
}
void Snack::add_head()
{
/* Snode Mypoint;
Mypoint.x=head->x;
Mypoint.y=head->y+1;
Mypoint.next=head;
Mypoint.last=NULL;
head=&Mypoint;*/ // 结点 为何不行???
/* SnodeLnk p;
p=new Snode;
p->x=head->x;
p->y=head->y+1;
p->next=head;
p->last=NULL;
head=p;*/ // 指针 通过
SnodeLnk p=new Snode;
switch(point)
{
case LEFT:
{
p->x=head->x;
p->y=head->y-1;
head->last=p;
p->next=head;
p->last=NULL;
head=p;
break;
}
case RIGHT:
{
p->x=head->x;
p->y=head->y+1;
head->last=p;
p->next=head;
p->last=NULL;
head=p;
break;
}
case DOWN:
{
p->x=head->x+1;
p->y=head->y;
head->last=p;
p->next=head;
p->last=NULL;
head=p;
break;
}
case UP:
{
p->x=head->x-1;
p->y=head->y;
head->last=p;
p->next=head;
p->last=NULL;
head=p;
break;
}
}
}
void Snack::del_last()
{
SnodeLnk q;
int m,n;
q=head;
while (q->next)//不是 结束
{
q=q->next;
}
m=q->x;
n=q->y;
area[m][n]=0;
q->last->next=NULL;
delete q;
}
void Snack::delay()
{
for (int i=0;i<Time;i++)
{
for (int j=0;j<Time;j++)
{
;;
}
}
}
void Snack::move()
{
add_head();
del_last();
}
void Snack::key_move(char ch)
{
switch(ch)
{
case 'w':
case 'W': if (point==DOWN)
{
break;
}
point=UP;
break;
case 's':
case 'S': if (point==UP)
{
break;
}
point=DOWN;
break;
case 'a':
case 'A': if (point==RIGHT)
{
break;
}
point=LEFT;
break;
case 'd':
case 'D':if(point==LEFT)
{
break;
}
point=RIGHT;
break;
default:
break;
}
}
void Snack::print()
{
int m,n;
SnodeLnk p=head;
while(p->next) //少打一个 最后一个
{
m=p->x;
n=p->y;
area[m][n]=1;
p=p->next;
}
m=p->x; //打 最后一个
n=p->y;
area[m][n]=1;
for(int i=0;i<Hlenth;i++)
{
for(int j=0;j<Vlenth;j++)
{
if (area[i][j]==1)
{
cout<<"*";
}
else
cout<<" ";
}
cout<<endl;
}
}
void Snack::food()
{
srand(unsigned int(time(0)));
fx=rand()%(Vlenth-3)+1;//确保落在框内
fy=rand()%(Vlenth-3)+1;
while(area[fx][fy]==1) //检查是否落在 蛇身上
{
fx=rand()%(Vlenth-3)+1;
fy=rand()%(Vlenth-3)+1;
}
area[fx][fy]=1;
//cout<<"fx:"<<fx<<" fy:"<<fy<<endl;
}
void Snack::eat_food()
{
if ((head->x==fx)&&(head->y==fy))
{
area[fx][fy]=0;
add_head();
food();
}
else{}
}
void Snack::jud_die()
{
int x,y,m,n;
SnodeLnk q;
q=head->next;
x=head->x;
y=head->y;
if (x==(Vlenth-1)||x==0||y==(Hlenth-1)||y==0)
{
cout<<"failed!\n";
this->~Snack();
exit(0);
}
while (q->next)
{
m=q->x;
n=q->y;
q=q->next;
if (m==x&&n==y)
{
cout<<"failed !\n";
this->~Snack();
exit(0);
}
}
m=q->x;//检查是否撞上尾巴
n=q->y;
if (m==x&&n==y)
{
cout<<"failed !\n";
this->~Snack();
exit(0);
}
}
3.main.cpp
#include "my_snake.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
Snack snack;
char ch;
int i;
char count=0;
snack.food();
snack.print();
while (1)
{
ch=_getch();
snack.key_move(ch);
while(!_kbhit()) //没有键盘按下 无为0
{
snack.delay();
snack.delay();
snack.move();
system("cls");
snack.print();
snack.eat_food();
snack.jud_die();
//snack.print();
}
}
return 0;
}
游戏说明:按任意键“开始”。 通过 键盘的 ' W ', 'S ', 'A ' , 'D' 分别控制 运动的 “上”,“下”,“左”,“右”
分享到:
相关推荐
当您读过这本书之后,就获得了迅速提升自己c++功力的一个契机。.(2-1) 在国际上,本书所引起的反响,波及整个计算技术出版领域,余音至今未绝。几乎在所有c++书籍的推荐名单上,本书都会位于前三名。作者高超的...
其重点在于学会如何编写C++程序,如何使用标准库提供的抽象设施。大部分C++程序员需要了解本书这两部分的内容。除了讲解基础知识以外,这两部分还有另外一个重要的意图。标准库设施本身是用C++编写的抽象数据类型,...
其重点在于学会如何编写C++程序,如何使用标准库提供的抽象设施。大部分C++程序员需要了解本书这两部分的内容。除了讲解基础知识以外,这两部分还有另外一个重要的意图。标准库设施本身是用C++编写的抽象数据类型,...
当您读过这本书之后,就获得了迅速提升自己c++功力的一个契机。.(2-2) 在国际上,本书所引起的反响,波及整个计算技术出版领域,余音至今未绝。几乎在所有c++书籍的推荐名单上,本书都会位于前三名。作者高超的...
这是一款真正意义上适合软件界面开发的C++界面库。采用XML管理GDI资源(如:图片、字体、颜色等),最大程度将界面与逻辑分开,让程序员有更多的时间去进行软件内部的逻辑处理。SKINSE扩展了非常丰富的API接口,兼容...
以笔者自己学汇编的过程来说,那时候是1990年,刚好是中国第一次病毒大流行,大家的计算机上都是那个病毒的开山鼻祖——乒乓病毒,在流行DOS的时期,看着在屏幕上蹦的小球,心中就有一个问题:如何编出这样一个玩意...
第三章 编写第一个应用程序 .20 3.1 Welcome 程序 .20 3.2 代 码 分 析 .20 3.3 运 行 程 序 .23 .4 添 加 注 释 .25 3.5 小 结 .27 第二部分 C#程序设计基础.28 第四章 数 据 类 型 .28 4.1 值 类 型...
是一款真正意义上适合软件界面开发的C++皮肤库。通过使用XML文件来配置GDI资源(如:图片、字体、颜色等),最大程度将 界面与逻辑分开,让程序员有更多的时间去进行软件内部的逻辑处理。SkinSE没有采用传统的HOOK修改...
退一步说,就算东方不败第一击有点偏差,他稍作修正后,马上跟上的第二第三击,也会击中他想击中的地方。在武功差的对手剑还没拨出来的时候,他已杀死对方并刺上了一朵花。 所以真正的软件高手,他并不满足于...
)专为.NET设计的一门语言,号称“C/C++家族中第一种面向组件的语言”。很多人觉得它应该像C或者C++,但事实上它更像是java的一个clone,所以作为入门,读一下清华大学出版社出版的《Java 语言与面向对象程序设计》...
第1 章:对象入门 第2 章:一切都是对象 第3 章:控制程序流程 第4 章:初始化和清除 第5 章:隐藏实现过程 第6 章:类再生 第7 章:多形性 第8 章:对象的容纳 第9 章:违例差错控制 第10 章:Java IO 系统 第11 章...
12.1 第一天:接到一个案子 207 12.2 第二天:需求分析 208 第13章 设计(领域分析与抽象) 210 13.1 原语设计 210 13.2 了解Yake 216 13.3 GVWL1.0开发 222 13.4 范型设计与实作 223 第14章 编码 224 14.1 原语设计...
本书为第一卷,主要讨论计算机科学中最本质的问题:如何正确选择和高效地实现算法。 在书中,作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上众大师们在探索解决方案中发生的轶事、走过的弯路和...
由于游湖完全没有道具辅助,很多时候开局连第一个障碍也过不了就不得不重来。虽然只是一款小游戏,玩法也不特别,不过却抓住了玩家输不起的心理,用超高难度吸引玩家来挑战。 四、拟需要解决的主要问题 飞翔的小鸟...
作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上众大师们在探索解决方案中发生的轶事、走过的弯路和不断精益求精的历程,引导读者像真正的程序员和软件工程师那样富于创新性地思考,并透彻阐述和...
作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上众大师们在探索解决方案中发生的轶事、走过的弯路和不断精益求精的历程,引导读者像真正的程序员和软件工程师那样富于创新性地思考,并透彻阐述和...
1.2实验环境 在Windows 2000(SP2) 或Windows XP 操作系统上,使用C++语言,VC6.0工具作为开发环境(IDE) 1.3实验要求 根据给出的程序分别使用等价类划分法、边界值分析法、判定表方法、因果图法、正交试验法、功能...
《Thingking in Java》(第一版中文)是这样描述设计模式的:他在由 Gamma, Helm 和 Johnson Vlissides 简称 Gang of Four(四人 帮),缩写 GoF 编著的《Design Patterns》一书中被定义成一个“里程碑”。事实上,那本书...
作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上众大师们在探索解决方案中发生的轶事、走过的弯路和不断精益求精的历程,引导读者像真正的程序员和软件工程师那样富于创新性地思考,并透彻阐述和...