找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 271|回复: 9

[求助]今天中午写的程序,有问题

[复制链接]
发表于 2009-11-3 03:35:06 | 显示全部楼层 |阅读模式 IP:江苏扬州
今天早上改了下,还是有错误,晕~~~~大家帮忙看下
//--head file--//
#include <vector>
using namespace std;
#ifndef SNAKE_H
#define SNAKE_H
class Cmp
{
friend class Csnake;
int rSign; //竖坐标
int lSign; //横坐标
public:
Cmp(int r,int l){setPoint(r,l);}
Cmp(){}
void setPoint(int r,int l){rSign=r;lSign=l;}
Cmp operator-(const Cmp &m)const
{
return Cmp(rSign-m.rSign,lSign-m.lSign);
}
Cmp operator+(const Cmp &m)const
{
return Cmp(rSign+m.rSign,lSign+m.lSign);
}
};
class Csnake
{
Cmp firstSign; //蛇头坐标
Cmp secondSign;//蛇颈坐标
Cmp lastSign; //蛇尾坐标
Cmp nextSign; //预备蛇头
int row; //列数
int line; //行数
int count; //蛇身长度
vector<vector<char> > snakeMap;
int GetDirections()const;
void change(char& a,char& b)
{
char temp;
temp=a;
a=b;
b=temp;
}
public:
Cmp getFirstSign()const{return firstSign;}
Cmp getSecondSign()const{return secondSign;}
Cmp getLastSign()const{return lastSign;}
char getSymbol(const Cmp& c)const{return snakeMap[c.rSign][c.lSign];}
Csnake(int n)
//初始化游戏界面大小
{
if(n<20)line=20+2;
else if(n>50)line=50+2;
else line=n+2;
row=int(float(line)*1.5)+2;
}
void InitInstance(); //初始化游戏界面
bool UpdataGame(); //更新游戏界面
void ShowGame(); //显示游戏界面
};
#endif // SNAKE_H
发表于 2009-11-3 03:35:07 | 显示全部楼层 IP:江苏扬州
//--.cpp(执行文件)--//
#include <windows.h>
#include <ctime>
#include <iostream>
#include "snake.h"
using namespace std;
void Csnake::InitInstance()
{
snakeMap.resize(line);
for(int i=0;i<line;i++)
{
snakeMap[i].resize(row);
for(int j=0;j<row;j++)
{
if(i==0||i==line-1)snakeMap[i][j]='-';
else if(j==0||j==line)snakeMap[i][j]='|';
else snakeMap[i][j]=' ';
}
for(int m=1;m<6;m++)snakeMap[line/2][m]='@';
firstSign.setPoint(5,line/2);
secondSign.setPoint(4,line/2);
lastSign.setPoint(1,line/2);
}
int Csnake::GetDirections()const
{
if(GetKeyState(VK_UP)<0) return 1; //1表示按下上键
if(GetKeyState(VK_DOWN)<0) return 2; //2表示按下下键
if(GetKeyState(VK_LEFT)<0) return 3; //3表示按下左键
if(GetKeyState(VK_RIGHT)<0)return 4; //4表示按下右键
return 0;
}
bool Csnake::UpdataGame()
{
int choice=GetDirections();
int r;int l;
static bool eatFood=true;
if(eatFood)
{
do
{
srand(time(0));
r=(rand()%row-2)+1;
l=(rand()%line-2)+1;
if(snakeMap[r][l]!='@')snakeMap[r][l]='*';
}while (snakeMap[r][l]=='@');
}
switch (choice)
{
case 1://向上
//如果蛇头和社颈的横坐标不相同,执行下面操作
if(firstSign.rSign!=secondSign.rSign)nextSign.setPoint(firstSign.rSign,firstSign.lSign+1);
//否则,如下在原本方向上继续移动
else nextSign=firstSign+(firstSign-secondSign);
break;
case 2://向下
if(firstSign.rSign!=secondSign.rSign)nextSign.setPoint(firstSign.rSign,firstSign.lSign-1);
else nextSign=firstSign+(firstSign-secondSign);
break;
case 3://向左
if(firstSign.lSign!=secondSign.lSign)nextSign.setPoint(firstSign.rSign-1,firstSign.lSign);
else nextSign=firstSign+(firstSign-secondSign);
break;
case 4://向右
if(firstSign.lSign!=secondSign.lSign)nextSign.setPoint(firstSign.rSign,firstSign.lSign+1);
else nextSign=firstSign+(firstSign-secondSign);
break;
default:
nextSign=firstSign+(firstSign-secondSign);
}

if(getSymbol(nextSign)!='*'&&getSymbol(nextSign)!='@'
&& nextSign.rSign<row-1 && nextSign.rSign>0
&& nextSign.lSign<line-1 && nextSign.lSign>0)
//如果没有碰到食物(且没有死亡的情况下),直接将蛇尾减去,并在移动方向上在firstSign前面加上新的蛇头
{
change(snakeMap[nextSign.rSign][nextSign.lSign],snakeMap[lastSign.rSign][lastSign.lSign]);
//-------改变蛇头坐标--------
firstSign.rSign=nextSign.rSign; firstSign.lSign=nextSign.lSign;
secondSign.rSign=firstSign.rSign; secondSign.lSign=firstSign.lSign;
//-------改变蛇尾坐标--------
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
if(snakeMap[lastSign.rSign+i][lastSign.lSign+j]=='@')
{lastSign.rSign+=i;lastSign.lSign+=j;}
//---------------------------
eatFood=false;
return true;
}
//-----吃食-----
else if(getSymbol(nextSign)=='*')
{
snakeMap[nextSign.rSign][nextSign.lSign]='@';
firstSign.rSign=nextSign.rSign;firstSign.lSign=nextSign.lSign;
return true;
}
//-----死亡-----
else return false;
}
void Csnake::ShowGame()
{
for(int i=0;i<line;i++)
{
for(int j=0;j<row;j++)
cout<<snakeMap[i][j];
cout<<endl;
}
Sleep(1000);
system("cls");
}
回复

使用道具 举报

发表于 2009-11-3 03:35:09 | 显示全部楼层 IP:江苏扬州
//--main文件--//
#include "snake.h"
using namespace std;
int main()
{
Csnake s(40);
s.InitInstance();
bool noDead;
do
{
s.ShowGame();
noDead=s.UpdataGame();
}while (!noDead);
system("pause");
return 0;
}
回复

使用道具 举报

发表于 2009-11-3 03:35:10 | 显示全部楼层 IP:江苏扬州
错误提示:
--------------------Configuration: snake - Win32 Debug--------------------
Compiling...
snake.cpp
d:\documents and settings\administrator\桌面\snake\snake.cpp(25) : error C2601: 'GetDirections' : local function definitions are illegal
d:\documents and settings\administrator\桌面\snake\snake.cpp(34) : error C2601: 'UpdataGame' : local function definitions are illegal
d:\documents and settings\administrator\桌面\snake\snake.cpp(102) : error C2601: 'ShowGame' : local function definitions are illegal
d:\documents and settings\administrator\桌面\snake\snake.cpp(112) : fatal error C1004: unexpected end of file found
Skipping... (no relevant changes detected)
main.cpp
Error executing cl.exe.
snake.exe - 4 error(s), 0 warning(s)




局部函数定义不合法?为什么?这种错误一般都是哪里?
回复

使用道具 举报

发表于 2009-11-3 03:35:11 | 显示全部楼层 IP:江苏扬州
仔细点看,你声明的是setPoint,但是调用的是setPonit
回复

使用道具 举报

发表于 2009-11-3 03:35:12 | 显示全部楼层 IP:江苏扬州
我是 呵呵 笨死了
回复

使用道具 举报

发表于 2009-11-3 03:35:13 | 显示全部楼层 IP:江苏扬州
停点了,晕~~~网吧来了,大家给看看哪里有逻辑错误啊?
回复

使用道具 举报

发表于 2009-11-3 03:35:14 | 显示全部楼层 IP:江苏扬州
我也想写出你这样的的程序来,但时我发现老谭的那本书上面都没有教这方面的东西啊。请问到哪里能找到啊。
回复

使用道具 举报

发表于 2009-11-3 03:35:15 | 显示全部楼层 IP:江苏扬州
我都是看的外国人写的书(翻译成中文的),不知道什么名字
回复

使用道具 举报

发表于 2009-11-3 03:35:18 | 显示全部楼层 IP:江苏扬州
我早上改了下,又出现新问题,帮忙看下~为什么出现上面的出错提示?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 13:33 , Processed in 0.123521 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表