| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 448 人关注过本帖
标题:贪吃蛇中的两个类
只看楼主 加入收藏
yi19860699
Rank: 2
来 自:江西
等 级:论坛游民
帖 子:42
专家分:40
注 册:2009-9-3
结帖率:87.5%
收藏
 问题点数:0 回复次数:0 
贪吃蛇中的两个类
#include <iostream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <process.h>    /* _beginthread, _endthread */
#include <windows.h>    /* Sleep() */
using namespace std;
int a[100][100]={0};
int yes;
int p,q,sum;
class Snake
{
public:
    Snake()
    {
       x[0]=0;y[0]=4;x[1]=0;y[1]=3;x[2]=0;y[2]=2;
       line=3;
       sorce=0;
    }
    int new1()
    {
        if(a[x[line-1]-1][y[line-1]]==0)
        {
            x[line]=x[line-1]-1;
            y[line]=y[line-1];
        }
        if(a[x[line-1]+1][y[line-1]]==0)
        {
            x[line]=x[line-1]+1;
            y[line]=y[line-1];
        }
        if(a[x[line-1]][y[line-1]-1]==0)
        {
            x[line]=x[line-1];
            y[line]=y[line-1]-1;
        }
        if(a[x[line-1]][y[line-1]+1]==0)
        {
            x[line]=x[line-1];
            y[line]=y[line-1]+1;
        }
        if(sum!=0)
        {
            line+=1;
            sorce+=10;
        }
        return 0;
    }
    int run();
    int round();
    int x[200];
    int y[200];
    int line;
    int sorce;

};
class food
{
public:
    int born()
    {
        if(1)
        {
            for(;;)
            {
                x=rand()%10;
                y=rand()%10;
                if(a[x][y]!=42)
                   break;
            }
            a[x][y]=3;
        }
        return 0;
    }
    int x;
    int y;
};
Snake sanke;
food fod;
char way = 'd';// 刚开始的方向是向前
int again()
{
    for(int i=0;i<100;i++)
        for(int j=0;j<100;j++)
            if(i!=fod.x||j!=fod.y)
            a[i][j]=0;
    return 0;
}
int Snake::round()
{
    //char way;
   Snake();
   for(int i=sanke.line-1;i>0;i--)
   {
       sanke.x[i]=sanke.x[i-1];
       sanke.y[i]=sanke.y[i-1];
   }
//  way = getch(); //不在这里输入
   system("cls");
   if(way=='w'||way=='a'||way=='s'||way=='d')
      sum+=1;
   switch(way)
   {
    case 'D':
   case 'd':
       {
           if((sanke.y[0])==9||a[sanke.x[0]][sanke.y[0]+1]==42)
           {
               cout<<"-_-!你撞死了"<<endl;
               cin.get();
               exit(0);           
           }
           sanke.y[0]=sanke.y[0]+1;
           again();
           if(yes==1)
           fod.born();
           for(int t=0;t<=line-1;t++)
           a[sanke.x[t]][sanke.y[t]]=42;
       };break;
       case 'S':
   case 's':
       {
           if(sanke.x[0]==9||a[sanke.x[0]+1][sanke.y[0]]==42)
           {
               cout<<"-_-!你撞死了"<<endl;
               cin.get();
               exit(0);           
           }      
           sanke.x[0]+=1;
           again();
           if(yes==1)
           fod.born();
           for(int t=0;t<=line-1;t++)
           a[sanke.x[t]][sanke.y[t]]=42;
       };break;
       case 'A':
   case 'a':
       {
           if(sanke.y[0]==0||a[sanke.x[0]][sanke.y[0]-1]==42)
           {
               cout<<"-_-!你撞死了"<<endl;
               cin.get();
               exit(0);           
           }      
           sanke.y[0]-=1;
           again();
           if(yes==1)
           fod.born();
           for(int t=0;t<=line-1;t++)
           a[sanke.x[t]][sanke.y[t]]=42;
       };break;
       case 'W':
   case 'w':
       {
           if(sanke.x[0]==0||a[sanke.x[0]-1][sanke.y[0]]==42)
           {
               cout<<"-_-!你撞死了"<<endl;
               cin.get();
               exit(0);           
           }         
           sanke.x[0]-=1;
           again();
           if(yes==1)
           fod.born();
           for(int t=0;t<=line-1;t++)
           a[sanke.x[t]][sanke.y[t]]=42;
       };break;
   }
   return 0;
}
int Snake::run()
{
   yes=1;
   for(p=0;p<10;p++)
       for(q=0;q<10;q++)
       {
           if(a[p][q]==3)
           {
               yes=0;
               break;
           }
       }
   if(yes==1)
   sanke.new1();
   sanke.round();
   for(int b=0;;)
   {
       if(1)
       {
            for(int t=0;t<10;t++)
                cout<<"---";
            for(int i=0;i<10;i++)
            {
               cout<<"|";
               cout<<endl;
               for(int j=0;j<10;j++)
               printf("%3c",a[i][j]);
            }
            cout<<endl;
            for( t=0;t<10;t++)
                cout<<"---";
            cout<<"         你的得分是:"<<sanke.sorce<<endl;
            break;
       }
   }
     for(int t=0;t<12;t++)
         cout<<endl;
    //  sanke.run(); //这里的递归不要了
     return 0;
}



int main()
{
    int b;
    cout<<"用w  s  a  d和回车来控制上下左右,按住任意方向键即可快速移动"<<endl;
    cout<<"\t空格键开始游戏"<<endl;
    a[0][2]=42;a[0][3]=42;a[0][4]=42;
    for(int t=0;t<10;t++)
        cout<<"---";
    for(int i=0;i<10;i++)
    {
        cout<<"|";
        cout<<endl;
        for(int j=0;j<10;j++)
            printf("%3c",a[i][j]);
    }
    cout<<endl;
    for(t=0;t<10;t++)
        cout<<"---";
    cout<<"         你的得分是:"<<sanke.sorce<<way<<endl;
    sum=0;
    while((b = getch()) != ' '); //  防止自动开始
    while(1)//
    {//
        while(!kbhit())  // 没有按键按下
        {      
            sanke.run();//
            if(kbhit())//
                ;//
            else//
                Sleep(500);//
        } //
    way = getch();    //
    } //
    cout<<endl;
    return 0;

}
snake 和 food 这两个类中的很多代码不懂,请大侠们指点··
搜索更多相关主题的帖子: 贪吃 
2010-07-11 10:14
快速回复:贪吃蛇中的两个类
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013056 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved