Tower Of Hanoi | برج هانوی | زبان C


ترم اول برای درس برنامه نویسی،پروژ] پایانترمم ارائه برج های هانوی به شیوه گرافیکی و تصویری بود. به زبان سی.
روی این پروژه زحمت زیادی کیشده شد.
و اونو توی ادامه مطلب گذاشتم 🙂
این گیف نشون میده چطور این کد کار میکنه.
#include<stdio.h> #include<windows.h> //baraye taghyire makane makannoma void gotoxy(int x, int y) { COORD coord = {x, y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); } #include <time.h> //estefade az tabe delay void delay(unsigned int mseconds) { clock_t goal = mseconds + clock(); while (goal > clock()); } void hanoi(int n,char a,char b,char c); void move(int n,char a,char b); void Print(); void Printpanel(int n); int a1=0,a2=0,a3=0; int main() { int n; char a='A',b='B',c='C'; //baraye namayesh satri dar khat aval printf("Please Enter number of loops :(0~9):"); scanf("%d",&n); a1=n;//bekhater inke nemitunim az aval meghdar dehi konim darune tabe maine inkaro mikonim Print(); gotoxy(0,11-n); Printpanel(n); delay(500); gotoxy(25,0); hanoi(n,a,b,c); return 0; } void hanoi(int n,char a,char b,char c) { if(n==1) //halate tavaghof tabe bazghashti move(n,a,b); else { hanoi(n-1,a,c,b); move(n,a,b); hanoi(n-1,c,b,a); } } void move(int n,char a,char b) { int j; switch(a) //pak kardan yek disk { case 'A'://Yani dar sotun A in kararo anjam bede a1--;//mizan kardane Y gotoxy(21+n,10-a1);//ye Y balatar vaymise pointer for(j=0;j<n*2;j++) printf(" \b\b");//hazf disk gotoxy(22,10-a1);//ba'd az hazf , pointer be makani aghabtar miravad ke in gotoxy aan ra dorost mikond printf("|");//printe | bejaye disk break; case 'B': a2--; gotoxy(38+n,10-a2); for(j=0;j<n*2;j++) printf(" \b\b"); gotoxy(39,10-a2); printf("|"); break; case 'C':a3--; gotoxy(55+n,10-a3); for(j=0;j<n*2;j++) printf(" \b\b"); gotoxy(56,10-a3); printf("|"); break; } gotoxy(40,0); //namayesh dar khat aval printf("Move %d, %c-->%c\n",n,a,b); switch(b) //baraye keshidan makane jadide halghe { case 'A': gotoxy(23-n,10-a1); a1++; for(j=0;j<n*2-1;j++) printf("="); gotoxy(0,22); delay(800); break; case 'B': gotoxy(40-n,10-a2); a2++; for(j=0;j<n*2-1;j++) printf("="); gotoxy(0,22); delay(800); break; case 'C': gotoxy(57-n,10-a3); a3++; for(j=0;j<n*2-1;j++) printf("="); gotoxy(0,22); delay(800); break; } } void Print() { printf("\n\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("\t\t | | | \n"); printf("\t\t | | | \n"); printf("\t\t _____A________________B________________C_____\n"); } void Printpanel(int n) { int i,j; for(i=1;i<=n;i++) { for(j=1;j<=23-i;j++) //fasele dadan ta sotun printf(" "); for(j=1;j<=i*2-1;j++)//*2-1: baraye in ke '='ha tedadeshan fard bashad- 1,3,5,... printf("="); printf("\n"); //paridan be khat ba'di baraye shurue dobareye halghe va rasme halghe jadid } }