⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coding & algoritma.cpp

📁 Snake game with c code. very fun and a lil bit hard
💻 CPP
字号:

//WARNING	:COMPILER = BORLAND C++ 3.1
//CODING
//CREATED BY	:Wili.Y , Hermanto S , Linda A
//doubly link list
#include<stdio.h>
#include<conio.h>
#include<dos.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>

struct node{
  int x,y;
  struct node *prev,*next;
}*head=NULL,*curr,*tail;

void push(void){
  curr = (struct node*)malloc(sizeof(struct node));
  if(head==NULL){
	 head=curr;
	 head->prev=NULL;
  }else{
	 tail->next=curr;
	 curr->prev=tail;
  }
  tail=curr;
  tail->next=NULL;
}

void popAll(void) {
  curr=tail;
  while(curr!=NULL) {
	 curr=curr->prev;
	 free(tail);
	 tail=curr;
  }
}

void main() {
  int xm,ym; //Posisi Node
  int xa,ya; //Posisi Buah
  int i;      //Push Pertama
  int makan;
  char tekan;
  clrscr();
  randomize();
  textcolor(BLUE);
  gotoxy((80-strlen("Prototype Ular Nokia"))/2,12);cprintf("Prototype Ular Nokia");
  getch();
  clrscr();
  _setcursortype(0);
  textcolor(0);
  //ini langkah awal
  xm = -1; //Kekiri
  ym =  0; //nggak begerak vertikal

  //awalnya kita kasi node buat ularnya 4 buah aja
  for(i = 1; i <= 4; i++) {
	 push();
	 curr->x  = 40+i;
	 curr->y  = 3;
  }

  //buat nyetak
  curr = head;
  while (curr != NULL) { //nyetak supaya di perulangan ga nyetak semua lagi
	 textcolor(BLUE);
	 gotoxy(curr->x, curr->y); cprintf("\1");
	 curr = curr->prev;
  }

  //ini posisi buah nya
  xa = rand() % 73 + 2;
  ya = rand() % 21 + 2;
  textcolor(BLUE);
  gotoxy(xa, ya); cprintf("\3");

  //inisialisasi awal yang dimakan
  makan = 0;

  do {
	 /*
	 //artificial intelligentnya bisa gerak ke mana arah makanan
	 //ini kalo gerak ke bawah ato ke atas
	 if ((xm == 0 && ym == -1 || xm == 0 && ym == 1) && head->y == ya) {
		if (head->x < xa) { //Ke kanan
	xm = 1;
	ym = 0;
		}
		else if(head->x > xa) {  //Ke kiri
	xm = -1;
	ym =  0;
		}
	 }
	 //Kalo gerak ke kanan ato kiri
	 if ((xm == 1 && ym == 0 || xm == -1 && ym ==  0) && head->x == xa) {
		if (head->y > ya) { //Ke atas
	xm =  0;
	ym = -1;
		}
		else if(head->y < ya) { //Ke bawah
	xm = 0;
	ym = 1;
		}
	 }
*/

	 if(kbhit()) {
		tekan = getch();
		if(tekan == 0) { //Kalo bingung coba aja apus pasti ada beda nya
			tekan = getch();
		}
//pilihan gerak
		switch(tekan) {
	case 72 : if(ym !=  1) {    //=-> Ke Atas
			 xm =  0;
			 ym = -1;
		  }
		  break;
	case 75 : if(xm !=  1) {    //=-> Ke Kiri
			 xm = -1;
			 ym =  0;
		  }
		  break;
	case 77 : if(xm != -1) {    //=-> Ke Kanan
			 xm = 1;
			 ym = 0;
		  }
		  break;
	case 80 : if(ym != -1) {    //=-> Ke Bawah
			 xm = 0;
			 ym = 1;
		  }
		  break;
		}
	 }


	 gotoxy(head->x, head->y); printf("\1"); //node selain head ga usah di cetak
	 delay(50);
	 if(tekan != 27) { //Kalo keluar tailnya ga di apus jd jml node bener
		gotoxy(tail->x, tail->y); printf(" "); //hapus yg paling akhir
	 }

	 //Kalo nabrak makanan push 1 node di ekor & bikin makanan baru
	 if(head->x == xa && head->y == ya) {
		push();
		tail->x = tail->x + xm;
		tail->y = tail->y + ym;
		makan++;
		//ini untuk jumlah yg dimakan, bila 15 maka menang
		if(makan == 15) {
			tekan  = 27;
			clrscr();
			gotoxy((80-strlen("Menang"))/2,12);printf("Menang");
			getch();
			break;
		}else { //kalo else maka akan dirandom lagi posisi makanan baru
			xa = rand() % 73 + 2;
			ya = rand() % 21 + 2;
			textcolor(BLUE);
			gotoxy(xa, ya); cprintf("\3");
		}
	 }

	 //Ngikutin arah belok head utk masing2 node
	 curr = tail;
	 do {
		if(curr->prev != NULL) {
	curr->x  = curr->prev->x;
	curr->y  = curr->prev->y;
	curr     = curr->prev;
		}
	 }while(curr != head);

	 //Kalo nabrak badan keluar
	 curr = tail;
	 do {
		if(curr->prev != NULL) {
	if(head->x == curr->x && head->y == curr->y) {
	  tekan = 27;
	  break;
	}
	curr = curr->prev;
		}
	 }while(curr->prev != head);

//buat tembus2
	 if(head->x ==  1 && xm == -1 && ym == 0) {
		head->x = 80;
	 }
	 if(head->x == 80 && xm ==  1 && ym == 0) {
		head->x =  1;
	 }
	 if(head->y ==  1 && xm == 0 && ym == -1) {
		head->y = 25;
	 }
	 if(head->y == 25 && xm == 0 &&  ym == 1) {
		head->y =  1;
	 }
	 head->x += xm;
	 head->y += ym;
  }while(tekan != 27);
  //buat free semua
	 popAll();
}





ALGORITMA

DEKLARASI	:
struct node
{
	int x,y;
	struct *prev , *next;
}
*head==NULL, *curr , *tail;
int xm,ym;
int xa,ya;
int i;
int makan;
char tekan;
clrscr();
randomize();

FUNCTION push()
{
	curr=(struct node*)malloc(sizeof(struct node));
	jika(head==NULL)
	{
		head=curr;
		head->prev=NULL;
	}
	jika tidak
	{
		tail->next=curr;
		curr->prev=tail;
	}
	tail=curr;
	tail->next=NULL;
}

FUNCTION popAll()
{
	curr=tail;
	selama(curr!=NULL)
	{
		curr=curr->prev;
		hapus(tail);
		tail=curr;
	}
}

DESKRIPSI	:
textcolor(BLUE);
pindah koordinat(x,y)((80-strlen("Prototype Ular Nokia"))/2,12);
cetak("Prototype Ular Nokia");
getch();
clrscr();
setcursortype(0);
//ini langkah awal
xm=-1;	//kekiri
ym=0;	//tidak bergerak vertikal;

//mula mula buat node untuk ular nya 4 aja
selama(i=1;i<=4;i++)
{
	push();
	curr->x=40+i;
	curr->y=3;
}

curr=head;
selama(curr!=NULL)
{
	textcolor(BLUE);
	pindah koordinat(x,y)(curr->x,curr->y);
	cetak("\1");
	curr=curr->prev;
}

//ini posisi buahnya
xa=rand()% 73 +2;
ya=rand()% 21 +2;
textcolor(BLUE);
pindah koordinat(x,y)(xa,ya);
cetak("\3");

//inisialisasi awal yang dimakan
makan=0;
do
{
	jika(keyboard ditekan)
	{
		tekan=getch();
		jika(tekan ==0)
		{
			tekan=getch();
		}
		//pilihan gerak
		switch(tekan)
		{
			case 72:
				jika(ym!=1)	//ke Atas
				{
					xm=0;
					ym=-1;
				}
				break;
			case 75:
				jika(xm!=1)	//ke kiri
				{
					xm=-1;
					ym=0;
				}
				break;
			case 77:
				jika(xm!=-1)	//ke kanan
				{
					xm=1;
					ym=0;
				}
				break;
			case 80:
				jika(ym!=-1)	//ke bawah
				{
					xm=0;
					ym=1;
				}
		}

		pindah koordinat(x,y)(head->x ,head->y);
		cetak("\1");
		delay(50);

		jika(tekan !=27)	//kalau keluar ,tailnya tdk dihapus
		{
			pindah koordinat(x,y)(tail->x ,tail->y);
			cetak(" ");	//hapus yang paling akhir
		}

		//kalau nabrak makanan ,push 1 node diekor &bikin makanan baru
		jika(head->x==xa && head->y ==ya)
		{
			push();
			tail->x=tail->x +xm;
			tail->y=tail->y +ym;
			makan++;

			//ini untuk jumlah yang dimakan ,kalau 15 ,menang
			jika(makan==15)
			{
				tekan=27;
				clrscr();
				pindah koordinat(x,y)((80-strlen("Menang")/2,12));
				cetak("Menang");
				getch();
				break;
			}
			jika tidak	//mencetak posisi makanan baru
			{
				xa=rand()% 73 +2;
				ya=rand()% 21 +2;
				textcolor(BLUE);
				pindah koordinat(x,y)(xa,ya);
				cetak("\3");
			}
		}

		//Mengikuti arah belok head untuk masing -masing node
		curr=tail;
		do
		{
			jika(curr->prev!=NULL)
			{
				curr->x=curr->prev->x;
				curr->y=curr->prev->y;
				curr=curr->prev;
			}
		}while(curr!=head);

		//kalau nabrak badan ,keluar;
		do
		{
			jika(curr->prev!=NULL)
			{
				jika(head->x==curr->x && head->y==curr->y)
				{
					tekan=27;
					break;
				}
				curr=curr->prev;
			}
		}while(curr->prev !=head);
		
		//buat tembus2 
		jika(head->x==1 &&xm ==-1 && ym==0)
		{
			head->x=80;
		}
		jika(head->x==80 &&xm ==1 && ym==0)
		{
			head->x=1;
		}
		jika(head->y==1 &&xm ==0 && ym==-1)
		{
			head->y=25;
		}
		jika(head->y==25 &&xm ==0 && ym==1)
		{
			head->x=1;
		}
		head->x +=xm;
		head->y +=ym
	}while(tekan!=27)
	popAll
}


		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -