Salve,sono un nuovo sto facendo l'informatica alle scuole superiori mi sono appassionato e cosi molto spesso programmo. Oggi mi sono imbattuto in un incoveniente cercando di creare snake.
La logica fondamentale che ho usato è stata quella del gotoxy cioè che mettendo un pulisci schermo ad ogni case la psizione del serpente si aggiorna.
Ci sono 2 problemi:
1) se nel gotoxy metto coordiante diverse (cioè per esempio gotoxy(25,30) passando sopra l'asterisco con il mio "serpente" l'asterisoc saprisce mentre se il gotoxy ha coordiante uguali va,per esempio gotoxy(25,25); )
2)Esiste un metodo alternativo per creare snake senza usare il gotoxy o il pulisci schermo? Questo perchè appare del lag per i troppi aggiornamenti.
QUI IL CODICE:
#include <stdio.h>
#include <stdlib.h>
#include <conio2.h>
#define SUCCESS 0
#define NOT_SUCCESS 1
int a=0,b=0,c=0,d=0,e=0,f=0,x=2,y=2;
int check_win()
{
if(a==1&&b==1&&c==1&&d==1&&e==1&&f==1)
{
system("cls");
textcolor(YELLOW);
gotoxy(25,25);
printf("HAI VNTO!\n");
_sleep(2000);
return SUCCESS;
}
else
return NOT_SUCCESS;
}
void up_function()
{
_beep(500,50);
system("cls");
if(a!=1)
{
gotoxy(15,15);
textcolor(BLUE);
printf("*");
}
if(b!=1)
{
gotoxy(20,20);
textcolor(BLUE);
printf("*");
}
if(c!=1)
{
gotoxy(30,30);
textcolor(BLUE);
printf("*");
}
if(d!=1)
{
gotoxy(35,35);
textcolor(BLUE);
printf("*");
}
if(e!=1)
{
gotoxy(40,40);
textcolor(BLUE);
printf("*");
}
if(f!=1)
{
gotoxy(45,45);
textcolor(BLUE);
printf("*");
}
x=x-1;
gotoxy(y,x);
textcolor(RED);
printf("---+");
if(x==15&&y==15)
{
a=1;
_beep(1000,100);
}
if(x==20&&y==20)
{
b=1;
_beep(1000,100);
}
if(x==30&&y==30)
{
c=1; _beep(1000,100);
}
if(x==35&&y==35)
{
d=1; _beep(1000,100);
}
if(x==40&&y==40)
{
e=1; _beep(1000,100);
}
if(x==45&&y==45)
{
f=1; _beep(1000,100);
}
}
void left_function()
{
system("cls");
if(a!=1)
{
textcolor(BLUE);
gotoxy(15,15);
printf("*");
}
if(b!=1)
{
textcolor(BLUE);
gotoxy(20,20);
printf("*");
}
if(c!=1)
{
textcolor(BLUE);
gotoxy(30,30);
printf("*");
}
if(d!=1)
{
textcolor(BLUE);
gotoxy(35,35);
printf("*");
}
if(e!=1)
{
gotoxy(40,40);
textcolor(BLUE);
printf("*");
}
if(f!=1)
{
gotoxy(45,45);
textcolor(BLUE);
printf("*");
}
y=y-1;
gotoxy(y,x);
textcolor(RED);
printf("<---");
if(x==15&&y==15)
{
a=1;
_beep(1000,100);
}
if(x==20&&y==20)
{
b=1;
_beep(1000,100);
}
if(x==30&&y==30)
{
c=1; _beep(1000,100);
}
if(x==35&&y==35)
{
d=1; _beep(1000,100);
}
if(x==40&&y==40)
{
e=1; _beep(1000,100);
}
if(x==45&&y==45)
{
f=1; _beep(1000,100);
}
}
void right_function()
{
_beep(500,50);
system("cls");
if(a!=1)
{
textcolor(BLUE);
gotoxy(15,15);
printf("*");
}
if(b!=1)
{
textcolor(BLUE);
gotoxy(20,20);
printf("*");
}
if(c!=1)
{
textcolor(BLUE);
gotoxy(30,30);
printf("*");
}
if(d!=1)
{
textcolor(BLUE);
gotoxy(35,35);
printf("*");
}
if(e!=1)
{
textcolor(BLUE);
gotoxy(40,40);
printf("*");
}
if(f!=1)
{
textcolor(BLUE);
gotoxy(45,45);
printf("*");
}
y=y+1;
gotoxy(y,x);
textcolor(RED);
printf("--->");
if(x==15&&y==15)
{
a=1;
_beep(1000,100);
}
if(x==20&&y==20)
{
b=1;
_beep(1000,100);
}
if(x==30&&y==30)
{
c=1; _beep(1000,100);
}
if(x==35&&y==35)
{
d=1; _beep(1000,100);
}
if(x==40&&y==40)
{
e=1; _beep(1000,100);
}
if(x==45&&y==45)
{
f=1; _beep(1000,100);
}
}
void down_function()
{
_beep(500,50);
system("cls");
if(a!=1)
{
textcolor(BLUE);
gotoxy(15,15);
printf("*");
}
if(b!=1)
{
textcolor(BLUE);
gotoxy(20,20);
printf("*");
}
if(c!=1)
{
textcolor(BLUE);
gotoxy(30,30);
printf("*");
}
if(d!=1)
{
textcolor(BLUE);
gotoxy(35,35);
printf("*");
}
if(e!=1)
{
textcolor(BLUE);
gotoxy(40,40);
printf("*");
}
if(f!=1)
{
textcolor(BLUE);
gotoxy(45,45);
printf("*");
}
x=x+1;
gotoxy(y,x);
textcolor(RED);
printf("--- -");
if(x==15&&y==15)
{
a=1;
_beep(1000,100);
}
if(x==20&&y==20)
{
b=1;
_beep(1000,100);
}
if(x==30&&y==30)
{
c=1; _beep(1000,100);
}
if(x==35&&y==35)
{
d=1; _beep(1000,100);
}
if(x==40&&y==40)
{
e=1; _beep(1000,100);
}
if(x==45&&y==45)
{
f=1; _beep(1000,100);
}
}
int main() {
register int key = 0;
int win;
printf("\t\t\tSNAKE!\n\n");
printf("Per giocare utilizza le frecce direzionali mentre per uscire usa il tasto esc\n");
printf("Premere una tasto per cominciare\n");
getch();
system("MODE CON: COLS=1000 LINES=1000");
printf("Premi una freccia per continuare\n");
while (key != 27) {
win=check_win();
if(win==SUCCESS)
return 0;
key = getch();
if (key == 224) {
key = getch();
switch (key) {
case 72:
{
up_function();
break;
}
case 75:
{
left_function();
break;
}
case 77:
{
right_function();
break;
}
case 80:
{
down_function();
break;
}
}
}
}
}