求助一个无人解答的问题小的c++问题求解答

&& 查看话题
大二编程废求助高手解答一下这个贪吃蛇的C++程序
看到一个贪吃蛇的C++程序&&中间有几个地方不懂 求指教!
#include &&//使用当前时间做种子;
enum dir{up,down,left,right};&&//枚举类型
class Fence{
& & & & void InitFence();
& & & & void OutputF();
}f; //定义对象;
void Fence::InitFence(){
& & & & for(int i=0; i<20; i++)
& & & & & & & & for(int j=0; j<20; j++){
& & & & & & & & & & & & if(i==0||i==19||j==0||j==19)
& & & & & & & & & & & & & & & & game= '*';
& & & & & & & & & & & & else game= ' ';
//显示框框;
void Fence::OutputF(){
& & & & for(int i=0; i<20; i++){
& & & & & & & & for(int j=0; j<20; j++)
& & & & & & & & & & & & cout<<game<<' ';
& & & & & & & & & & & & cout<<
& & & & & & & & }
class SnakeNode{
& & & & int x,y;
& & & & SnakeNode *prior,*
& & & & void add_head(int x,int y);
& & & & int get_x();
& & & & int get_y();
& & & & void delete_tail();
}*head=NULL, *tail =NULL;
//插入头结点;
void SnakeNode::add_head(int x,int y){
& & & & SnakeNode *q=new SnakeN
& & & & q->x =x; q->y =y;
& & & & q->next =& && && &
& & & & q->prior =NULL;
& & & & if(head) head->prior =q;
& & & & head =q;
& & & & if(!tail) tail =& & & & f.game= '*';&&//f对象可以在定义Fence类时定义; 且Fence类在SnakeNode类前定义;
int SnakeNode::get_x(){
int SnakeNode::get_y(){
//删除尾结点;
void SnakeNode::delete_tail(){
& & & & SnakeNode *p =
& & & & f.game= ' ';//把尾结点的坐标表示的'*'置为空格;
& & & & if(tail==head)
& & & & & & & & tail= head= NULL;
& & & & else{
& & & & & & & & tail= tail->
& & & & & & & & tail->next= NULL;
//move移动;
class move{
& & & && & //枚举变量point: 控制方向;
& & & & int food_x;
& & & & int food_y;
& & & & void moving();
& & & & void change_point(char);&&//改变方向;
& & & & void get_food();
void move::moving(){
& & & & int a,b;
& & & & a= head->get_x();&&//取得头结点横坐标
& & & & b= head->get_y();&&//头结点纵坐标
& & & & switch(point){
& & & & case up: --a;
& & & & case down: ++a;
& & & & case left: --b;
& & & & case right: ++b;
& & & & if(a==19||b==19||a==0||b==0){& & & & & & & & & & & & & & & & //判断是否撞墙;& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & cout<<"game over!!!"<<
& & & & & & & & exit(0);
& & & & if(a==food_x && b==food_y){& & & & & & & & & & & & & & & & & & & & //吃
& & & & & & & & head->add_head(a,b);
& & & & & & & & get_food();
& & & & else{
& & & & & & & & head->add_head(a,b); //插入头结点;
& & & & & & & & head->delete_tail(); //删除尾结点;
void move::change_point(char keydown){
& & & & switch(keydown){
& & & & case 'w': point=
& & & & case 's': point=
& & & & case 'a': point=
& & & & case 'd': point=
void move::get_food(){
& & & & srand((unsigned int) time(NULL)); //做种子(程序运行时间);
& & & & food_x= rand()%18+1;
& & & & food_y= rand()%18+1;
& & & & f.game= '*';}
int main(){
& & & & cout<<"Using 'w,s,a,d'to control direction!!!\n\n\n";
& & & & //画框框和小蛇;
& & & & f.InitFence();
& & & & head->add_head(4,3);
& & & & head->add_head(4,4);
& & & & head->add_head(4,5);
& & & & m.get_food();
& & & & f.OutputF();
& & & & while (true){
& & & & & & & & char keydown= getch(); //getch()返回键盘上读取的字符;包含头文件
& & & & & & & & m.change_point(keydown);
& & & & & & & & while(!kbhit()){ //判断有没有按键落下;
& && && && && &&&& & & & system("cls" );&&//清屏函数& & & & & & & &
& && && && && && && && && && && &m.moving();
& & & & & & & & & & & & f.OutputF();
& & & & & & & & & & & & Sleep(200);& & & & & & & & }
& & & & return 0;
问一下红字部分程序的设置目的 以及怎么运行和实现的……(简要的说 就是什么意思= =)
特别是结点那一块……动态数组和各种指针什么的 看着就头大………………
话说……那个诡异的出现在程序中间的表情真的不关我的事…… 数据结构中的。
1)双向链表插入操作:插入到表头的处理
q->next = //把q对应结点插入到 head位置,即head为q后继。& && &
q->prior =NULL;//q对应结点是表头了,对应的prior 应该为空。
head->prior =q;//如果已经存在头结点,要处理原头结点,把其前驱设置为q结点
head =q;& && &&&//q作为新头结点
2)删除操作类似的。 好好看看数据结构的链表操作:插入和删除内容啊! : Originally posted by imyourkobe at
好好看看数据结构的链表操作:插入和删除内容啊! 我……還木有學數據結構…………下學期的課程 : Originally posted by viking1992 at
我……還木有學數據結構…………下學期的課程 那看不懂不怪你啊。慢慢学习吧。 数据结构不用学的&&看看就可以了& &那个逻辑是固定的········ : Originally posted by 文俊点点 at
数据结构不用学的&&看看就可以了& &那个逻辑是固定的········ 反正是必修課=_,=急急急!!!求大神解答一点小问题!!!万分感谢!!!_c++吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:165,398贴子:
急急急!!!求大神解答一点小问题!!!万分感谢!!!收藏
为什么这个程序运行之后,4 5 6 7 四个选项中运行不了??但是1 2 3 和最后的8都可以正常运行?我觉得是代码中for 循环中的 if 没有运行
#include&stdio.h&#include"stdlib.h"#include&string.h& lrkc();//录入课程信息 lrxs();//录入学生信息 xsxk();//学生选课 xsxmcx();//通过学生姓名查询选课信息 xsxhcx();//通过学生学号查询选课信息 kcmccx();//通过课程名称查询选课信息 kcdmcx();//通过课程代码查询选课信息 cxrx();//查询每门课的选课人数struct kcxx//建立一个课程信息的结构体{ char kcmc[20];}kc[6];struct xsxx//建立一个学生信息的结构体{ char xsxm[20];}xs[6];struct temp//建立一个总汇学生和课程信息的结构体{
char xsxm[20]; char kcmc[20];}temp[6];int main()//主函数{ while(1)//使其循环 {
printf("\n");
printf("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");
printf("\n");
printf("\t\t
欢迎来到学生选课系统
请在(1--8)中选择 \n");
printf("\n");
printf("\t\t
录入课程信息(共6门)\n");
printf("\t\t
录入学生信息(共6人)\n");
printf("\t\t
为每位学生选课\n");
printf("\t\t
通过学生姓名查询学生选课记录\n");
printf("\t\t
通过学生学号查询学生选课记录\n");
printf("\t\t
通过课程名称查询课程选课记录\n");
printf("\t\t
通过课程代码查询课程选课记录\n");
printf("\t\t
查询每门课的选课人数\n");
printf("\n");
printf("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");
printf("\t\t\t
请选择 1--8\n");
scanf("%s",&ch);
switch(ch)//选择 {
case '1' :lrkc();
case '2' :lrxs();
case '3' :xsxk();
case '4' :xsxmcx();
case '5' :xsxhcx();
case '6' :kcmccx();
case '7' :kcdmcx();
case '8' :cxrx();
default:printf("对不起,请重新选择!\n"); } } return 0;} lrkc(void)//录入课程信息{ for(i=0;i&6;i++) { printf("输入课程 %d 名称 代码\n",i+1); scanf("%s %d",kc[i].kcmc,&kc[i].kcdm); } return 0;} lrxs(void)//录入学生信息{ for(i=0;i&6;i++) {
printf("输入学生 %d 姓名
学号\n",i+1);
scanf("%s %d",xs[i].xsxm,&xs[i].xsxh); }return 0;} xsxk(void)//学生选课{ char kcmc[20]; printf("为第1位同学选课,请输入所选的课程名称\n"); scanf("%s",kcmc); for(i=0;i&6;i++) {
if(strcmp(kcmc,kc[i].kcmc)==0) //判断所选的课程
temp[0].xsxm[20]=xs[0].xsxm[20];
temp[0].xsxh=xs[0].
temp[0].kcmc[20]=kc[i].kcmc[20];
temp[0].kcdm=kc[i].
kc[i].rx++;
else } printf("为第2位同学选课,请输入所选的课程名称\n"); scanf("%s",kcmc); for(i=0;i&6;i++) {
if(strcmp(kcmc,kc[i].kcmc)==0) //判断所选的课程
temp[1].xsxm[20]=xs[1].xsxm[20];
temp[1].xsxh=xs[1].
temp[1].kcmc[20]=kc[i].kcmc[20];
temp[1].kcdm=kc[i].
kc[i].rx++;
printf("为第3位同学选课,请输入所选的课程名称\n"); scanf("%s",kcmc); for(i=0;i&6;i++) {
if(strcmp(kcmc,kc[i].kcmc)==0) //判断所选的课程
temp[2].xsxm[20]=xs[2].xsxm[20];
temp[2].xsxh=xs[2].
temp[2].kcmc[20]=kc[i].kcmc[20];
temp[2].kcdm=kc[i].
kc[i].rx++;
printf("为第4位同学选课,请输入所选的课程名称\n"); scanf("%s",kcmc); for(i=0;i&6;i++) {
if(strcmp(kcmc,kc[i].kcmc)==0) //判断所选的课程
temp[3].xsxm[20]=xs[3].xsxm[20];
temp[3].xsxh=xs[3].
temp[3].kcmc[20]=kc[i].kcmc[20];
temp[3].kcdm=kc[i].
kc[i].rx++;
printf("为第5位同学选课,请输入所选的课程名称\n"); scanf("%s",kcmc); for(i=0;i&6;i++) {
if(strcmp(kcmc,kc[i].kcmc)==0)//判断所选的课程
temp[4].xsxm[20]=xs[4].xsxm[20];
temp[4].xsxh=xs[4].
temp[4].kcmc[20]=kc[i].kcmc[20];
temp[4].kcdm=kc[i].
kc[i].rx++;
printf("为第6位同学选课,请输入所选的课程名称\n"); scanf("%s",kcmc); for(i=0;i&6;i++) {
if(strcmp(kcmc,kc[i].kcmc)==0)//判断所选的课程
temp[5].xsxm[20]=xs[5].xsxm[20];
temp[5].xsxh=xs[5].
temp[5].kcmc[20]=kc[i].kcmc[20];
temp[5].kcdm=kc[i].
kc[i].rx++;
else } return 0;} xsxmcx(void)//通过学生姓名查询选课信息{ char xsxm[20]; printf("输入需要查询的学生的姓名\n"); scanf("%s",xsxm); for(i=0;i&6;i++) {
if(strcmp(xsxm,temp[i].xsxm)==0)//判断学生的姓名
printf("此学生的选课信息为:\n");
printf("%s
%d\n",temp[i].xsxm,temp[i].xsxh,temp[i].kcmc,temp[i].kcdm);
}return 0;} xsxhcx(void)//通过学生学号查询选课信息{ printf("输入需要查询的学生的学号\n"); scanf("%d",&xsxh);
for(i=0;i&6;i++)
if(xsxh=temp[i].xsxh)//判断学生的学号
printf("此学生的选课信息为:\n");
printf("%s
%d\n",temp[i].xsxm,temp[i].xsxh,temp[i].kcmc,temp[i].kcdm);
return 0;} kcmccx(void)//通过课程名称查询选课信息{ char kcmc[20]; printf("输入需要查询的课程的名称\n"); scanf("%s",kcmc); for(i=0;i&6;i++) {
if(strcmp(kcmc,temp[i].kcmc)==0)//判断课程的名称
printf("%s",temp[i].xsxm);
else } return 0;
看编译错误提示,用COUT简单纠错,,比帖吧省时间
额看到了while(1)
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或一个C++的问题,求解答_百度知道
一个C++的问题,求解答
log(10),求朋友解答;这个公式有问题吗,这个是怎么回事啊.documentsize&#47,编译器说:有多个重载函数“log”实例与参数列表匹配IDF[i]=log((double)IT.IndexArray[i],为什么分母上的log下划红线.ni)&#47;(double)IT
提问者采纳
og本身是标准数学函数库中的函数,出现重载函数说明程序中有用log为名字的函数,它表示的是自然对数的求法,找找有没有以此为名的函数,分母中的log(10)绝对是没有错误的,查查程序代码,破坏了原定义的数学中的含义才会出现此错误
恩 是的,之前有log,那出现这样的问题该怎么办呢?谢谢了。。。
将自己设计的函数名字多加个字符,以示区别就可以了,如log_m,这样既不会出现刚才的错误,也实现自己想表达设计函数的意义,两全其美,不是吗?
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C++小问题求高手解答_百度知道
C++小问题求高手解答
include&#92:score(s),3)}: 应输入 2 个参数;xutility(3390) ::max(Student *q) {&&quot:1)第24行 “const _Ty &std,const _Ty &)”;s[i]:&#92;=2,1); void Student:; } int main() {Student *p; Student s[3]={Student(1,number(n){} void max(Student *);i++) if(s[i];v c++&#92;s[i]:,Student(2;xutility(3382) ,_Pr)”:max”的声明 2)第24行“const _Ty &v c++&#92;include&#92;vc&#92;iostream&&lt,2);& for(i=1,却提供了 1 个(*q)#include& }; return 0;&lt.number&lt::max(const _Ty &: Student( &vc&#92: 参见“ cout& class Student {& max(p),const _Ty &; } 错误提示.score) q=&s[i].score&gt.score&lt:&#92: int score: 应输入 3 个参数;endl:max(const _Ty &: 参见“std,却提供了 1 个 d,Student(3,int n):;i& q=s
提问者采纳
iostream头文件中宏定义了max,,请把max函数改名
其他类似问题
为您推荐:
其他1条回答
Student stu(0; return 0,0); max(p)囧~你的max调用的是系统自带的函数 应该这样写main函数 int main() {Student *p
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁> C++Builder没有找到vcl60.bpl..无法运行。求助问题是这样的。。自己做了一个软件,
C++Builder没有找到vcl60.bpl..无法运行。求助问题是这样的。。自己做了一个软件,
mayflyzym & &
发布时间: & &
浏览:23 & &
回复:1 & &
悬赏:0.0希赛币
C++Builder 没有找到vcl60.bpl..无法运行。求助!!!问题是这样的。。自己做了一个软件,完成后,想在别的电脑上运行,双击exe,说有找到vcl60.bpl..无法运行
网上查了一下
“选择Project-&Options
Compiler页按Release
Packages页去掉钩选Build&with&runtimepackage
Linker去页去掉钩选Use&dynamic&RTL”
但是我找不到Build&with&runtimepackage,这个东西在哪?Packages应该是指组件包吧,在里面也没发现。求助。网上查了一下,如果不够选Build&with&runtimepackage,则文件会变大,但是能在无bcb的版本下运行。问题应该就在这。。。至于Release和Use&dynamic&RTL我都做了。。。就剩找不到Build&with&runtimepackage。。
就是“和运行时组件包一起编译(B)"这一项
问一下楼主,看不懂英文么?mayi75i & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-}

我要回帖

更多关于 求解答 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信