Jump to content

Ajuda com jogo Snake


Hulle
 Share

Recommended Posts

Olá, estou querendo criar minha versão do jogo da cobrinha para exercitar, mas preciso de uma ajuda. Eu criei um loop para o movimento, quando determinada seta é pressionada começa o movimento da cobrinha, mas depois que se inicia o loop o programa não lê mais nemhuma tecla e fica sempre indo na mesma direção.

É um jogo da cobrinha no DOS com as bibliotecas padrões do c++

Link to comment
Share on other sites

Estou começando então só fiz a parte do movimento.

#include <Windows.h>
#include <iostream>

using namespace std;

class CSnake
{
private:
   COORD Position;
   HANDLE sOutput, sInput;
   INPUT_RECORD InputRecord;
   DWORD Events = 0;

public:
   void DrawSnake(int draw);
   void MoveSnake();

};
void CSnake::DrawSnake(int draw)
{
   //Descrição: Desenha e apaga a snake;

   if (draw == 1)
   {
       SetConsoleCursorPosition(sOutput, Position);
       cout << "#";
   }
   else
   {
       SetConsoleCursorPosition(sOutput, Position);
       cout << " ";
   }

}

void CSnake::MoveSnake()
{
   sInput = GetStdHandle(STD_INPUT_HANDLE);
   sOutput = GetStdHandle(STD_OUTPUT_HANDLE);

   ReadConsoleInput(sInput, &InputRecord, 1, &Events);
   if (InputRecord.EventType == KEY_EVENT && InputRecord.Event.KeyEvent.bKeyDown)
   {
       if (InputRecord.Event.KeyEvent.wVirtualKeyCode == VK_RIGHT)
       {
           do
           {
               Sleep(100);
               DrawSnake(0);
               Position.X++;
               DrawSnake(1);
           } while (1);
       }
       else if (InputRecord.Event.KeyEvent.wVirtualKeyCode == VK_LEFT)
       {
           do
           {
               Sleep(100);
               DrawSnake(0);
               Position.X--;
               DrawSnake(1);
           } while (1);
       }
       else if (InputRecord.Event.KeyEvent.wVirtualKeyCode == VK_UP)
       {
           do
           {
               Sleep(100);
               DrawSnake(0);
               Position.Y--;
               DrawSnake(1);
           } while (1);
       }
       else if (InputRecord.Event.KeyEvent.wVirtualKeyCode == VK_DOWN)
       {
           do
           {
               Sleep(100);
               DrawSnake(0);
               Position.Y++;
               DrawSnake(1);
           } while (1);
       }
   }

}



void main()
{
   CSnake Snake;
   while (1)
   {
       Snake.MoveSnake();
   }

}
Edited by Hulle
Link to comment
Share on other sites

BernardoLourenco

Porque e que nao usas uma biblioteca de graficos melhor que o API do windows? Podes usar, por exemplo, a SFML, que esta em c++ (OOP) e funciona em windows, linux e ios.

  • Vote 1
Link to comment
Share on other sites

Se calhar estou a falar asneira, mas sabendo bases de c++ não deveria ser while(VARIAVEL==1)? do que: while(1)?

"The greatest mistake you can make in this life is to be continually fearing you will make one."

Elbert Hubbard -

 

Link to comment
Share on other sites

HappyHippyHippo

Se calhar estou a falar asneira, mas sabendo bases de c++ não deveria ser while(VARIAVEL==1)? do que: while(1)?

depende sempre do que queres fazer no ciclo e/ou como controlar-lo

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.