`
thecloud
  • 浏览: 882600 次
文章分类
社区版块
存档分类
最新评论

自己第一个真正意义上的C++程序

 
阅读更多

程序为 参考他人的思想,自己独自完成的 《贪食蛇》程序。虽然写的很烂,但想想好歹是自己第一个真正意义上的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' 分别控制 运动的 “上”,“下”,“左”,“右”


分享到:
评论

相关推荐

    Effective C++中文版第三版(带完整目录)(2-1)

    当您读过这本书之后,就获得了迅速提升自己c++功力的一个契机。.(2-1)  在国际上,本书所引起的反响,波及整个计算技术出版领域,余音至今未绝。几乎在所有c++书籍的推荐名单上,本书都会位于前三名。作者高超的...

    Accelerated C++源代码

    其重点在于学会如何编写C++程序,如何使用标准库提供的抽象设施。大部分C++程序员需要了解本书这两部分的内容。除了讲解基础知识以外,这两部分还有另外一个重要的意图。标准库设施本身是用C++编写的抽象数据类型,...

    Accelerated C++ PDF 中英文版

    其重点在于学会如何编写C++程序,如何使用标准库提供的抽象设施。大部分C++程序员需要了解本书这两部分的内容。除了讲解基础知识以外,这两部分还有另外一个重要的意图。标准库设施本身是用C++编写的抽象数据类型,...

    Effective C++ 中文版第三版(带完整目录).part2(2-2)

    当您读过这本书之后,就获得了迅速提升自己c++功力的一个契机。.(2-2)  在国际上,本书所引起的反响,波及整个计算技术出版领域,余音至今未绝。几乎在所有c++书籍的推荐名单上,本书都会位于前三名。作者高超的...

    界面开发(c++ 、.net)

    这是一款真正意义上适合软件界面开发的C++界面库。采用XML管理GDI资源(如:图片、字体、颜色等),最大程度将界面与逻辑分开,让程序员有更多的时间去进行软件内部的逻辑处理。SKINSE扩展了非常丰富的API接口,兼容...

    windows环境下32位汇编语言程序设计

    以笔者自己学汇编的过程来说,那时候是1990年,刚好是中国第一次病毒大流行,大家的计算机上都是那个病毒的开山鼻祖——乒乓病毒,在流行DOS的时期,看着在屏幕上蹦的小球,心中就有一个问题:如何编出这样一个玩意...

    C#微软培训资料

    第三章 编写第一个应用程序 .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修改...

    编写程序高手的造就的文章

     退一步说,就算东方不败第一击有点偏差,他稍作修正后,马上跟上的第二第三击,也会击中他想击中的地方。在武功差的对手剑还没拨出来的时候,他已杀死对方并刺上了一朵花。  所以真正的软件高手,他并不满足于...

    c#学习笔记.txt

    )专为.NET设计的一门语言,号称“C/C++家族中第一种面向组件的语言”。很多人觉得它应该像C或者C++,但事实上它更像是java的一个clone,所以作为入门,读一下清华大学出版社出版的《Java 语言与面向对象程序设计》...

    Java基础入门及提高.pdf

    第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 原语设计...

    编程珠玑(第2版•修订版),中文完整扫描版

    本书为第一卷,主要讨论计算机科学中最本质的问题:如何正确选择和高效地实现算法。 在书中,作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上众大师们在探索解决方案中发生的轶事、走过的弯路和...

    本科毕业设计开题报告(飞翔的小鸟游戏的设计与实现V3)

    由于游湖完全没有道具辅助,很多时候开局连第一个障碍也过不了就不得不重来。虽然只是一款小游戏,玩法也不特别,不过却抓住了玩家输不起的心理,用超高难度吸引玩家来挑战。 四、拟需要解决的主要问题 飞翔的小鸟...

    编程珠玑 修订版 第二版 高清

    作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上众大师们在探索解决方案中发生的轶事、走过的弯路和不断精益求精的历程,引导读者像真正的程序员和软件工程师那样富于创新性地思考,并透彻阐述和...

    编程珠玑 第2版【清晰有目录】.pdf

    作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上众大师们在探索解决方案中发生的轶事、走过的弯路和不断精益求精的历程,引导读者像真正的程序员和软件工程师那样富于创新性地思考,并透彻阐述和...

    黑盒测试实验报告.docx

    1.2实验环境 在Windows 2000(SP2) 或Windows XP 操作系统上,使用C++语言,VC6.0工具作为开发环境(IDE) 1.3实验要求 根据给出的程序分别使用等价类划分法、边界值分析法、判定表方法、因果图法、正交试验法、功能...

    二十三种设计模式【PDF版】

    《Thingking in Java》(第一版中文)是这样描述设计模式的:他在由 Gamma, Helm 和 Johnson Vlissides 简称 Gang of Four(四人 帮),缩写 GoF 编著的《Design Patterns》一书中被定义成一个“里程碑”。事实上,那本书...

    编程珠玑 第二版 超清中文版 文字版可复制

    作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上众大师们在探索解决方案中发生的轶事、走过的弯路和不断精益求精的历程,引导读者像真正的程序员和软件工程师那样富于创新性地思考,并透彻阐述和...

Global site tag (gtag.js) - Google Analytics