Jump to content
Hulle

Ajuda com jogo Snake

Recommended Posts

Hulle

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++

Share this post


Link to post
Share on other sites
Hulle

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

isso é código do windows ... terás de esperar por outra pessoa, ou dar-me tempo para ver a doc dessas funções


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
php master Damian/ao

Ola Hulle, eu tinha um nokia 3310 e nunca tive esse problema, devias experimentar. Abraços

Ps VÊ a documentação , tlvz te safes.

Share this post


Link to post
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

Share this post


Link to post
Share on other sites
FMC

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

Share this post


Link to post
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

Share this post


Link to post
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

×
×
  • 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.