Red de conocimiento del abogados - Preguntas y respuestas jurídicas - Programación en lenguaje C para el juego Snake

Programación en lenguaje C para el juego Snake

#include lt;windows.hgt;

#include lt;ctimegt;

#include lt;iostreamgt;

#include lt;vectorgt;

#include lt;queuegt;

usando el espacio de nombres std;

#ifndef SNAKE_H

#define SNAKE_H p>

clase Cmp

{

clase amiga Csnake;

int rSign; //abscisa

int lSign; ; //Coordenada vertical

public:

// amigo bool isDead(const Cmpamp; cmp);

Cmp(int r, int l){setPoint ( r, l);}

Cmp(){}

void setPoint(int r, int l){rSign=r; lSign=l;}

Cmp operador-(const Cmp amp; m)const

{

return Cmp(rSign-m.rSign, lSign-m.lSign);

}

Operador Cmp (const Cmp amp; m)const

{

return Cmp(rSign m.rSign, lSign m.lSign);

}

};

const int maxSize = 5; //Longitud inicial de la serpiente

clase Csnake

{

Cmp firstSign; //Coordenadas de la cabeza de la serpiente

Cmp secondSign; //Coordenadas del cuello de la serpiente

Cmp lastSign; p> Cmp nextSign; //Preparar cabeza de serpiente

int row; //Número de columnas

int line; //Número de filas

int count; // Longitud del cuerpo de la serpiente

vectorlt; chargt; gt; SnakeMap; // Toda la interfaz del juego

queuelt;

público:

p>

int GetDirections()const;

char getSymbol(const Cmpamp; c)const

//Obtener el carácter en el punto de coordenadas especificado

{

return SnakeMap[c.lSign][c.rSign];

}

Csnake (int n)

// Inicializa el tamaño de la interfaz del juego

{

if(nlt;20)line=20 2;

else if(ngt;30)line=30 2;

else line=n 2;

fila=line*3

}

bool está muerto(const Cmpamp; cmp)<

/p>

{

return ( getSymbol(cmp)=='@' || cmp.rSign == fila-1

|| cmp.rSign== 0 || cmp.lSign == línea-1 ||

cmp.lSign == 0 );

}

void InitInstance(); Interfaz del juego

bool UpdataGame(); //Actualizar la interfaz del juego

void ShowGame(); //Mostrar la interfaz del juego

};

#endif // SNAKE_H

usando el espacio de nombres std;

//Prueba exitosa

void Csnake::InitInstance()

{

snakeMap.resize(line); // SnakeMap[coordenada vertical][abscisa]

for(int i=0; ilt; line; i)

{

mapa de serpientes[i].resize(fila);

for(int j=0; jlt; fila; j)

{

mapa de serpientes[i][j]=" ';

}

}

for(int m=1;mlt; maxSize 1; m )

{

//Cuerpo de serpiente inicial

snakeMap[line/2][m]='@';

//Empuja las coordenadas del cuerpo de la serpiente a la cola

snakeBody.push(Cmp(m, (line/2)));

//snakeBody[abscissa][ Coordenadas verticales]

}

//Cabeza y cola de la lista enlazada

firstSign=snakeBody.back();

segundoSign .setPoint(maxSize- 1, línea/2);

}

//Prueba exitosa

int Csnake::GetDirections()const

{

if(GetKeyState(VK_UP)lt; 0) return 1; //1 significa presionar la tecla arriba

if(GetKeyState(VK_DOWN)lt; 0) return 2; //2 Indica que el botón hacia abajo está presionado

if(GetKeyState(VK_LEFT)lt; 0) return 3 //3 indica que está presionado el botón izquierdo

if (GetKeyState(VK_RIGHT)lt; 0) return 4; //4 significa presionar el botón derecho

return 0;

}

bool Csnake::UpdataGame ()

{

//------------------------------- ---------- ------

//Puntuación de inicialización 0

static int score=0;

// Obtener información clave del usuario

int Choice;

choice=GetDirections();

coutlt;lt;"Puntuación total: "lt;lt;scorelt;lt

;endl;

//Generar aleatoriamente las coordenadas de la ubicación del alimento

int r, l;

//Después de comer inicialmente, se genera un alimento

static bool eatFood=true;

//Si comes uno, el segundo alimento aparecerá nuevamente

if(eatFood)

{

hacer

{

//El rango de coordenadas está limitado a (1, 1) a (línea-2, fila-2) rectángulo de puntos

srand(tiempo(0));

r=(rand()(fila-2)) 1; //abscisa

l=(rand ( )(line-2)) 1; //Coordenadas verticales

//Si las coordenadas generadas aleatoriamente no son el cuerpo de la serpiente, es factible

//De lo contrario, las coordenadas serán regenerado

if(snakeMap[l][r]!='@')

{snakeMap[l][r]='*';}

}mientras (snakeMap[l][r]=='@');

}

cambiar (elección)

{

caso 1 ://Arriba

//Si las abscisas de la cabeza de la serpiente y el cuello son diferentes, realiza las siguientes operaciones

if(firstSign.rSign!= secondSign. rSign)nextSign.setPoint(firstSign .rSign, firstSign.lSign-1);

//De lo contrario, continúe moviéndose en la dirección original de la siguiente manera

else nextSign=firstSign (firstSign -segundoSigno);

descanso;

caso 2: //abajo

if(firstSign.rSign!=segundoSign.rSign)nextSign.setPoint(firstSign. rSign, firstSign.lSign 1);

else nextSign=firstSign (firstSign-segundoSign);

break

caso 3: //izquierda

if(firstSign .lSign!=segundoSign.lSign)nextSign.setPoint(firstSign.rSign-1, firstSign.lSign);

else nextSign=firstSign (firstSign-segundoSign);

romper;

caso 4: //A la derecha

if(firstSign.lSign!=segundoSign.lSign)nextSign.setPoint(firstSign.rSign 1, firstSign. lSign);

else nextSign=firstSign (firstSign-segundoSign);

romper;

predeterminado:

nextSign=firstSign (firstSign -segundoSigno);

}

//----------------------------- ---------------- ---------------------

si(

getSymbol(nextSign)!='*' amp; !isDead(nextSign))

//Si no se encuentra comida (y no se produce la muerte), elimina la cola de la serpiente e introduce una nueva serpiente. head

{

//Eliminar cola de serpiente

lastSign=snakeBody.front();

snakeMap[lastSign.lSign][ lastSign. rSign]=' ';

snakeBody.pop();

//Actualizar cabeza de serpiente

segundoSign=firstSign;

// Empuja la cabeza de serpiente

snakeBody.push(nextSign);

firstSign=snakeBody.back();

snakeMap[firstSign.lSign][ firstSign.rSign] ='@';

//No hay comida

eatFood=false;

return true;

}

//-----Comer-----

else if(getSymbol(nextSign)=='*' amp;amp; !isDead(nextSign))

{

segundoSign=firstSign;

snakeMap[nextSign.lSign][nextSign.rSign]='@';

//Presione sólo la cabeza de serpiente

snakeBody.push(nextSign);

firstSign=snakeBody.back();

eatFood=true;

//Puntos extra

puntuación =20;

devuelve verdadero

}

//-----Muerte- ----

else {coutlt;lt;"Muerto"lt;lt;endl;coutlt;lt;"Tu última puntuación total es "lt;lt;scorelt;lt;endl; }

}

void Csnake::ShowGame()

{

for(int i=0; ilt; line; i )

{

for(int j=0;jlt;row;j)

coutlt;lt;sakeMap[i][j];

coutlt;lt;endl;

}

Sueño(1);

sistema("cls");

}

int main()

{

Csnake s(20);

s.InitInstance();

//s.ShowGame();

int noDead;

hacer

{

s.ShowGame( );

noDead=s.UpdataGame();

}mientras (noDead);

sistema("pausa");

return 0;

}

Esto

Si el código se puede ejecutar, recuerda dar puntos