亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言如何實現漢諾塔游戲

2020-02-24 14:23:48
字體:
來源:轉載
供稿:網友

在學習C語言的時候我們都會先從簡單的漢諾塔游戲開始,那么你知道C語言如何實現漢諾塔游戲嗎?別著急,下面武林小編就帶大家一起去了解關于實現漢諾塔游戲的內容。

操作就是:A B 號碼A的塔頂一層放在號碼B的塔頂。如1(空格) 3 回車。 話說有人能把我這C的代碼添加到QT界面框架上去么?? 代碼寫的不好 ,維護性不夠,只能玩8層的,寫完以后發現很難拓展,軟件工程,設計模式有待提高....
里面提示輸入等級的裝B用了,沒有實現,大家隨便輸入個個位數就可以玩了。

stackfunc.c

#include"STACK.h"#include<stdio.h>extern ceng CENG[SIZE];//數據入棧void push_stack(stack*p,int number){  p->arr[p->head]=number;  p->head++;} //初始化棧1void init_stack1(stack*p){  p->head=0;  push_stack(p,1);  push_stack(p,2);  push_stack(p,3);  push_stack(p,4);  push_stack(p,5);  push_stack(p,6);  push_stack(p,7);  push_stack(p,8);}//初始化棧2 3void init_stack2_3(stack* p1,stack* p2){  p1->head=0;  p1->arr[p1->head]=0;  p2->head=0;  p2->arr[p2->head]=0;}//彈出棧頂元素int pop_stack(stack* p){  p->head--;  return p->arr[p->head];}//訪問棧頂元素int top_stack(stack* p){  return p->arr[p->head-1];}//比較兩個棧頂元素的大小int sizecmp_stack(stack* p1,stack* p2){  if(p1->arr[p1->head-1]>p2->arr[p2->head-1])  return 1;  else if(p1->arr[p1->head-1]<p2->arr[p2->head-1])  return -1;  else return 0;} //測出棧的高度int high_stack(stack* p){  return p->head;} //是否為空棧int empty_stack(stack* p){  return p->head==0;} //是否棧滿int full_stack(stack* p){ return p->head==SIZE;} //初始化層1void init_ceng1(ceng* p){  p->number=1;  p->row=SIZE-1;  p->col=0;} //初始化層2void init_ceng2(ceng* p){  p->number=2;  p->row=SIZE-2;  p->col=0;} //初始化層3void init_ceng3(ceng* p){  p->number=3;  p->row=SIZE-3;  p->col=0;} //初始化層4void init_ceng4(ceng* p){  p->number=4;  p->row=SIZE-4;  p->col=0;}//初始化層5void init_ceng5(ceng*p){  p->number=5;  p->row=SIZE-5;  p->col=0;}//初始化層6void init_ceng6(ceng*p){  p->number=6;  p->row=SIZE-6;  p->col=0;  }//初始化層7void init_ceng7(ceng*p){  p->number=7;  p->row=SIZE-7;  p->col=0;}//初始化層8void init_ceng8(ceng*p){  p->number=8;  p->row=SIZE-8;  p->col=0;}//移動層void move_ceng(int level,int *nrow,int *ncol,stack*p1,stack* p2,stack* p3,int stdec){  stack* arr[3];   arr[0]=p1;   arr[1]=p2;   arr[2]=p3;  *nrow=level-1-high_stack(arr[stdec]);  *ncol=stdec;}  //顯示圖片void show_map(void){  int i,j;  for(i=0;i<SIZE;i++)  {    for(j=0;j<3;j++)    {       if(CENG[0].row==i&&CENG[0].col==j)     {       printf("  |    1    |  ");     }else if(CENG[1].row==i&&CENG[1].col==j)     {      printf("  |   2   |  ");     }else if(CENG[2].row==i&&CENG[2].col==j)     {      printf("   |   3   |   ");     }else if(CENG[3].row==i&&CENG[3].col==j)     {      printf("   |  4  |   ");     }else if(CENG[4].row==i&&CENG[4].col==j)     {      printf("    |  5  |    ");     }else if(CENG[5].row==i&&CENG[5].col==j)     {      printf("    | 6 |    ");     }else if(CENG[6].row==i&&CENG[6].col==j){      printf("     | 7 |     ");     }else if(CENG[7].row==i&&CENG[7].col==j){      printf("     |8|     ");  }else  printf("            ");    }    printf("/n");  }  printf("=====================================================================/n");}

main.c

#include"STACK.h"#include<stdio.h> ceng CENG[SIZE];int main(){  int res=1,dec=1;  char con;  int newrow;  int newcol;  int step=0;  int level=0; while(1){  if (level==0)  {    do{    printf("請輸入游戲等級:/n");    scanf("%d",&level);    if(level<=0||level>8)    printf("等級范圍錯誤,重新輸入/n");    }while(level<=0||level>8);  }  level=8;  newrow=0,newcol=0;  stack STACK[3];  //初始化3個棧  init_stack1(&STACK[0]);  init_stack2_3(&STACK[1],&STACK[2]);  //初始化8個層  init_ceng1(&CENG[0]);  init_ceng2(&CENG[1]);  init_ceng3(&CENG[2]);  init_ceng4(&CENG[3]);  init_ceng5(&CENG[4]);  init_ceng6(&CENG[5]);  init_ceng7(&CENG[6]);  init_ceng8(&CENG[7]);while(1){    //打印畫面  switch(level){  case 1:show_map();break;  case 2:show_map();break;  case 3:show_map();break;  case 4:show_map();break;  case 5:show_map();break;  case 6:show_map();break;  case 7:show_map();break;  case 8:show_map();break;  }while(1) {  // printf("游戲等級為:%d/n",level);// printf("源棧最高層是%d ....../n",top_stack(&STACK[res]));  printf("   一號的高度%d ",STACK[0].head);  printf("      二號的高度%d ",STACK[1].head);  printf("     三號的高度%d/n",STACK[2].head);  printf("/n已經走的步數為 %d /n",step);  //選擇源 目標  scanf("%d",&res);  scanf("%d",&dec);  res--;  dec-- ;  if(!(res>=0&&res<3&&dec>=0&&dec<3))/*||(empty_stack(&STACK[res]))*/  {  printf("/n/n輸入范圍超出/n");  }else if(empty_stack(&STACK[res])==1)  {    printf("%d/n",STACK[0].head);    printf("/n/n源???n");  }  else if(sizecmp_stack(&STACK[res],&STACK[dec])<0)  {  printf("/n/n大塊的不能放在小塊的上面/n");  }else  {      if(dec!=res){    printf("/n/n/n正在移動層塊..../n");    step++;    move_ceng(level,&newrow,&newcol,&STACK[0],&STACK[1],&STACK[2],dec);    CENG[top_stack(&STACK[res])-1].row=newrow;    CENG[top_stack(&STACK[res])-1].col=newcol;    push_stack(&STACK[dec],pop_stack(&STACK[res]));    break;    }else    {      printf("/n/n/n放輕松/n");    }break;   }  show_map(); }     if (full_stack(STACK+1)==1||full_stack(STACK+2)==1)  {    printf("完成了漢諾塔!/n");    level++;    break;  }}  show_map();  printf("是否繼續游戲?繼續請輸入y,否則按其它鍵/n");  scanf("%*[^/n]");  scanf("%*c");  scanf("%c",&con);  if(con!='y')  break;}  return 0;}

STACK.h

#ifndef     __STACK_H__#define     __STACK_H__#define     SIZE    8typedef struct STACK{  int head;  int arr[SIZE];}stack; typedef struct CENG{  int number;  int row;  int col;}ceng; extern ceng CENG[SIZE]; //入棧void push_stack(stack*,int);//初始化棧1void init_stack1(stack*);//初始化棧2和3void init_stack2_3(stack*,stack*);//出棧int pop_stack(stack*);//訪問棧頂元素int top_stack(stack*);//比較棧頂元素大小 -1 1int sizecmp_stack(stack*,stack*);//判斷棧的高度int high_stack(stack*);//判斷棧是否為空1 0int empty_stack(stack*);//判斷棧是否滿1 0int full_stack(stack*); //初始化層1void init_ceng1(ceng*);//初始化層2void init_ceng2(ceng*);//初始化層3void init_ceng3(ceng*);//初始化層4void init_ceng4(ceng*);//初始化層5void init_ceng5(ceng*);//初始化層6void init_ceng6(ceng*);//初始化層7void init_ceng7(ceng*);//初始化層8void init_ceng8(ceng*);//移動層塊void move_ceng(int ,int * a,int *b,stack*,stack*,stack*,int k );//打印畫面void show_map();#endif 

演示圖片

看完后你知道C語言如何實現漢諾塔游戲了嗎?上文中小編為大家介紹了相信的實現方法,希望能夠對大家學習C語言的遞歸算法有所幫助

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩专区在线播放| 一本大道香蕉久在线播放29| 亚洲韩国欧洲国产日产av| 日韩精品在线观看网站| 日韩成人在线播放| 91国偷自产一区二区三区的观看方式| 日韩亚洲一区二区| 在线精品国产欧美| 国产亚洲aⅴaaaaaa毛片| 国产精品男人爽免费视频1| 国产成人自拍视频在线观看| 91在线视频九色| 成人黄色av网| 欧美日韩中文在线| 亚洲国内精品在线| 日韩av电影国产| 欧美日本在线视频中文字字幕| 久久久久久久久国产| 一区二区日韩精品| 欧美制服第一页| 成人免费高清完整版在线观看| 美女精品视频一区| 日韩精品欧美激情| 国产精品成人一区二区| 亚洲欧美另类国产| 日韩中文字幕免费看| 亚洲人成网站999久久久综合| 日韩在线观看电影| 久久久精品欧美| 亚洲国产成人av在线| 日韩欧美一区视频| 国产精品偷伦视频免费观看国产| 亚洲免费av电影| 亚洲最新av在线网站| 亚洲精品福利在线观看| 国产精品第一区| 国产精品一区av| 国产欧美一区二区三区在线| 另类色图亚洲色图| 欧美午夜影院在线视频| 国产精品偷伦免费视频观看的| 91香蕉嫩草神马影院在线观看| 福利一区视频在线观看| 91免费精品国偷自产在线| 国内偷自视频区视频综合| 欧美黑人xxx| 亚洲精品720p| 中文字幕日韩欧美在线视频| 久久久精品电影| 九九精品在线视频| 国产国语刺激对白av不卡| 成人精品视频99在线观看免费| 日韩av最新在线| 欧美日韩国产一中文字不卡| 成人久久久久爱| 成人高h视频在线| 中文字幕久久亚洲| 亚洲无限乱码一二三四麻| 国产激情视频一区| 亚洲欧美一区二区三区情侣bbw| 精品香蕉一区二区三区| 欧美高清视频在线| 精品久久国产精品| 亚洲视频在线免费看| 亚洲国产欧美日韩精品| 亚洲尤物视频网| 国产在线观看一区二区三区| 欧美成人午夜视频| 成人国产亚洲精品a区天堂华泰| 国产亚洲人成网站在线观看| 国产成人精品免费久久久久| 国内精品美女av在线播放| 最近更新的2019中文字幕| 成人亚洲综合色就1024| 欧美xxxx做受欧美| 97精品久久久中文字幕免费| 亚洲一区二区日本| 国内精品久久影院| 26uuu久久噜噜噜噜| 日韩免费观看视频| 91av在线播放视频| 美日韩精品免费观看视频| 久久乐国产精品| 97精品视频在线观看| 欧美激情亚洲综合一区| 日韩在线观看你懂的| 国产九九精品视频| 日韩av电影国产| 日韩三级成人av网| 日本午夜精品理论片a级appf发布| 国产精品久久久久久久久免费看| 日韩在线一区二区三区免费视频| 亚洲天堂第二页| 中文字幕久热精品在线视频| 992tv成人免费视频| 亚洲色图激情小说| 色先锋资源久久综合5566| 欧美噜噜久久久xxx| 一个人看的www欧美| 国产成人激情小视频| 欧美肥婆姓交大片| 最新国产成人av网站网址麻豆| 日韩av影片在线观看| 成人国产精品久久久久久亚洲| 狠狠躁夜夜躁人人躁婷婷91| 成人福利网站在线观看| 成人福利网站在线观看| 成人av色在线观看| 久久伊人色综合| 欧美激情在线观看视频| 亚洲自拍偷拍视频| 亚洲国产97在线精品一区| 欧美成人精品一区| 亚洲国产一区二区三区在线观看| 亚洲第一天堂无码专区| 国产精品精品一区二区三区午夜版| 久久久99免费视频| 色婷婷成人综合| 91香蕉嫩草影院入口| 国产精品久久久久久久久久久久| 欧美综合在线第二页| 一本久久综合亚洲鲁鲁| 欧美电影在线观看网站| 黑人与娇小精品av专区| 久久久国产影院| 日韩av网站在线| 九九热这里只有精品6| 欧美黑人xxxx| 日韩黄色在线免费观看| 亚洲网站视频福利| 日韩av免费网站| 欧美性猛交xxxx| 成人免费视频在线观看超级碰| 97久久精品国产| 91久久久久久久久久久| 永久555www成人免费| 这里只有视频精品| 精品福利在线看| 成人欧美一区二区三区在线| 精品久久中文字幕久久av| 国产精品自产拍在线观| 亚洲精品国产品国语在线| 久久精品久久久久电影| 日韩国产一区三区| 亚洲国产精品久久久久久| 在线视频欧美性高潮| 中文字幕视频一区二区在线有码| 亚洲第一精品自拍| 亚洲丝袜在线视频| 国产玖玖精品视频| 国产精品视频自在线| 欧美一级淫片播放口| 国模精品视频一区二区三区| 欧美日韩国产色| 久久国产精品偷| 国产精品第100页| 久久99国产精品自在自在app| 久久99久久久久久久噜噜| 国产精品久久久av久久久| 国产视频久久久久久久| 欧美肥老太性生活视频| 日韩欧美aaa| 欧美福利视频在线观看| 久久人人爽人人爽人人片av高清|