首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这个程序怎么运行的,好难解

2012-10-13 
这个程序如何运行的,好难解#include stdio.h#include windows.h#define KUAN 20int iz[KUAN][KUAN]//

这个程序如何运行的,好难解
#include <stdio.h>
#include <windows.h>
#define KUAN 20
int iz[KUAN][KUAN];//地图
struct _JieDian 
{
_JieDian *pNext;
POINT pt;
};
POINT ptShiWu;
struct _She 
{
_JieDian *SheTou;
_JieDian *SheWei;
int iFangXiang;
}She;
void ChuShiHua()
{
She.SheTou=new _JieDian;
She.SheTou->pNext=NULL;
She.SheTou->pt.x=6;
She.SheTou->pt.y=6;
She.SheWei=She.SheTou;
She.iFangXiang=0;
ptShiWu.x=rand()%20;
ptShiWu.y=rand()%20;
iz[She.SheTou->pt.y][She.SheTou->pt.x]=1;
iz[ptShiWu.y][ptShiWu.x]=2;
}
void pr()
{
printf("\n\n");
for (int i=0;i<KUAN;i++)
{
printf("\t\t");
for (int j=0;j<KUAN;j++)
{
printf(iz[i][j]==0?"█":iz[i][j]==2?"☆":"□");
}
printf("\n");
}
}
void SheChiShi()
{
if(iz[She.SheWei->pt.y][She.SheWei->pt.x]!=2)return;
_JieDian *p=new _JieDian;
p->pNext=NULL;
p->pt=ptShiWu;
switch(She.iFangXiang)
{
case 1:p->pt.y--;break;
case 2:p->pt.x--;break;
case 3:p->pt.x++;break;
case 4:p->pt.y++;break;
}
iz[p->pt.y][p->pt.x]=1;
She.SheWei->pNext=p;
She.SheWei=p;
iz[ptShiWu.y][ptShiWu.x]=1;
ptShiWu.x=rand()%KUAN;
ptShiWu.y=rand()%KUAN;
iz[ptShiWu.y][ptShiWu.x]=2;
}
void Move()
{
 _JieDian *p1=She.SheTou;
if(iz[She.SheTou->pt.y][She.SheTou->pt.x]==1)
  iz[She.SheTou->pt.y][She.SheTou->pt.x]=0;
She.SheTou->pt=She.SheWei->pt;
switch(She.iFangXiang)
{
case 1:She.SheTou->pt.y=(She.SheWei->pt.y+KUAN-1)%KUAN;break;
case 2:She.SheTou->pt.x=(She.SheWei->pt.x+KUAN-1)%KUAN;break;
case 3:She.SheTou->pt.x=(She.SheWei->pt.x+1)%KUAN;break;
case 4:She.SheTou->pt.y=(She.SheWei->pt.y+1)%KUAN;break;
}
She.SheWei->pNext=She.SheTou;
She.SheWei=She.SheTou;
if(She.SheTou->pNext!=NULL)She.SheTou=She.SheTou->pNext;
p1->pNext=NULL;
if(iz[She.SheWei->pt.y][She.SheWei->pt.x]==0)iz[She.SheWei->pt.y][She.SheWei->pt.x]=1;
SheChiShi();
pr();
}
void main()
{
ChuShiHua();
while (1)
{
if(GetAsyncKeyState(87)&0x8000)She.iFangXiang=1;
else if(GetAsyncKeyState(65)&0x8000)She.iFangXiang=2;
else if(GetAsyncKeyState(68)&0x8000)She.iFangXiang=3;
else if(GetAsyncKeyState(83)&0x8000)She.iFangXiang=4;
system("cls");
Move();
Sleep(60);
}
}

在main函数中没有引用的函数或者在其它函数中没有引用的函数怎么运行的

[解决办法]

C/C++ code
#include <stdio.h>#include <windows.h>#define KUAN 20         //地图的大小int iz[KUAN][KUAN];        //地图struct _JieDian            //蛇的结点位置,使用链表结构来存储蛇身上各结点的位置{    _JieDian *pNext;       //下一个结点    POINT pt;              //在地图中的位置};POINT ptShiWu;                        //食物的位置struct _She  {    _JieDian *SheTou;           //蛇头    _JieDian *SheWei;            //蛇尾    int iFangXiang;              //移动方向}She;                           //蛇的结构体//初始化函数,用来初始化蛇的位置和移动方向//以及随机产生食物的位置void ChuShiHua()             //在Main中调用{    She.SheTou=new _JieDian;   //创建蛇头    She.SheTou->pNext=NULL;    //初始蛇没有身体,只有一个蛇头结点    She.SheTou->pt.x=6;        //初始化蛇头的位置x,y    She.SheTou->pt.y=6;    She.SheWei=She.SheTou;     //初始化蛇尾=蛇头,说明蛇还没有身体    She.iFangXiang=0;          //初始化方向    ptShiWu.x=rand()%20;            //随机产生食物的位置     ptShiWu.y=rand()%20;            //随机产生食物的位置     iz[She.SheTou->pt.y][She.SheTou->pt.x]=1;   //在地图上标记1,表示蛇头,用于后面的显示    iz[ptShiWu.y][ptShiWu.x]=2;                    //在地图上标记2,表示食物,用于后面的显示}void pr()                  //在Move中调用,pr是print的缩写,用来画图的{    printf("\n\n");           //两行空白    for (int i=0;i<KUAN;i++)    {        printf("\t\t");          //两个制表符        for (int j=0;j<KUAN;j++)        {            //地图中存0表示空白█,2表示食物☆,1表示蛇□            printf(iz[i][j]==0?"█":iz[i][j]==2?"☆":"□");        //画地图,有食物,蛇和空白        }        printf("\n");            //画完了一行    }}// 蛇吃食物函数// 需要增加蛇身,重新随机生成食物void SheChiShi()               //在Move中调用,  {    if(iz[She.SheWei->pt.y][She.SheWei->pt.x]!=2)  //蛇尾的位置不是食物的位置则返回        return;    _JieDian *p=new _JieDian;        //创建一个蛇身结点    p->pNext=NULL;                    //下一结点为空    p->pt=ptShiWu;                    //在食物的位置    switch(She.iFangXiang)            //蛇的移动方向,根据移动方向来改变位置    {    case 1:p->pt.y--;break;          //上移一个    case 2:p->pt.x--;break;          //左移一个    case 3:p->pt.x++;break;          //右移一个    case 4:p->pt.y++;break;          //下移一个    }    iz[p->pt.y][p->pt.x]=1;          //标记蛇头的新位置    She.SheWei->pNext=p;             //加入蛇的尾部    She.SheWei=p;                    //作为新的蛇尾    iz[ptShiWu.y][ptShiWu.x]=1;      //食物的位置变成了蛇的身体    ptShiWu.x=rand()%KUAN;           //生成新的食物位置    ptShiWu.y=rand()%KUAN;    iz[ptShiWu.y][ptShiWu.x]=2;      //在地图上标记食物的位置}//蛇的移动//这里的蛇头其实是链表的头部,实际是蛇的尾部,链表是从蛇的尾部指向蛇头部的void Move()               //在Main中调用{    _JieDian *p1=She.SheTou;                            //保存蛇链表头结点    if(iz[She.SheTou->pt.y][She.SheTou->pt.x]==1 )      //如果头结点的位置为1,则变成0,表示蛇移走了        iz[She.SheTou->pt.y][She.SheTou->pt.x]=0;    She.SheTou->pt=She.SheWei->pt;                  //头结点位置指向链表尾,这是真的蛇头位置                    switch(She.iFangXiang)                          //蛇的移动方向,改变头结点位置    {    case 1:She.SheTou->pt.y=(She.SheWei->pt.y+KUAN-1)%KUAN;break;     //上y-1    case 2:She.SheTou->pt.x=(She.SheWei->pt.x+KUAN-1)%KUAN;break;     //左x-1    case 3:She.SheTou->pt.x=(She.SheWei->pt.x+1)%KUAN;break;          //右x+1    case 4:She.SheTou->pt.y=(She.SheWei->pt.y+1)%KUAN;break;          //下y-1    }    She.SheWei->pNext=She.SheTou;               //将新走的一步结点加入链表尾部    She.SheWei=She.SheTou;                      //产生新的链表尾部    if(She.SheTou->pNext!=NULL)                         She.SheTou=She.SheTou->pNext;             //重新指回链表头部    p1->pNext=NULL;                                    //链表尾的指针清空                    if(iz[She.SheWei->pt.y][She.SheWei->pt.x]==0)   //地图上添加蛇链表尾的位置,也就是新走的一步产生的蛇的身体        iz[She.SheWei->pt.y][She.SheWei->pt.x]=1;    SheChiShi();                                    //蛇吃食物    pr();                                           //打印地图}void main(){    ChuShiHua();                                    //初始化    while (1)    {        //下面函数的参数参考:http://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx        if(GetAsyncKeyState(87)&0x8000)She.iFangXiang=1;            //W键,蛇向上移动        else if(GetAsyncKeyState(65)&0x8000)She.iFangXiang=2;       //A键,蛇向左移动        else if(GetAsyncKeyState(68)&0x8000)She.iFangXiang=3;       //D键,蛇向右移动        else if(GetAsyncKeyState(83)&0x8000)She.iFangXiang=4;       //S键,蛇向下移动        system("cls");                   //清屏        Move();                          //移动蛇        Sleep(60);                       //挂起60ms    }} 

热点排行