📄 coding & algoritma.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 + -