| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1518 人关注过本帖
标题:[求助]今天中午写的程序,有问题
取消只看楼主 加入收藏
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
 问题点数:0 回复次数:9 
[求助]今天中午写的程序,有问题

今天早上改了下,还是有错误,晕~~~~大家帮忙看下
//--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

[此贴子已经被作者于2006-6-13 9:13:26编辑过]

搜索更多相关主题的帖子: Cmp int const operator 
2006-06-12 16:09
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

//--.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");
}

[此贴子已经被作者于2006-6-13 9:13:53编辑过]


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-12 16:10
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

//--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;
}

[此贴子已经被作者于2006-6-13 9:14:23编辑过]


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-12 16:11
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 



错误提示:
--------------------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)





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

[此贴子已经被作者于2006-6-13 9:15:54编辑过]


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-12 16:13
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

我是 呵呵 笨死了


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-12 16:26
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

停点了,晕~~~网吧来了,大家给看看哪里有逻辑错误啊?


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-12 20:04
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
我都是看的外国人写的书(翻译成中文的),不知道什么名字

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-13 09:16
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

我早上改了下,又出现新问题,帮忙看下~为什么出现上面的出错提示?


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-13 10:36
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

我的编辑器上面的很对称的,到这一复制就成这样了~!呵呵,,掉了个括号


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-13 10:49
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
我昏~我觉得这个题目适合用队列做,先进先出原则,初始化时先压入队列4个@作为蛇身,然后由于蛇移动,然后将最先压如队列的删除,重新压入新的蛇头(坐标)~这样方便多了,我现在想改也懒得改了,麻烦~!

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-13 11:24
快速回复:[求助]今天中午写的程序,有问题
数据加载中...
 
   



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

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