Quem nunca jogou PAC-MAN? É um jogo clássico. Neste projeto, apresento alguns "truques" que podemos fazer usando o Dev-C++ para ler o teclado, movimentar um objeto na tela e até brincar de come-come. Esse é um projeto um pouco diferente dos demais, por usarmos dois arquivos no projeto: main.cpp e keys.h (que contém a definição dos códigos de várias teclas).
No Dev-C++ crie um novo projeto em uma pasta própria, depois copie e cole o código de MAIN.CPP e salve. Ainda no Dev-C++ vá no menu Arquivo, Novo, Arquivo fonte. Copie e cole o código de KEYS.H e salve-o com este nome.
Note que em main.cpp há um include que usa aspas " " e não < >. Isto é porque o arquivo keys.h está na mesma pasta que main.cpp e não uma biblioteca do Dev-C++. Guarde isso, pois é bem importante essa diferenciação.
MAIN.CPP
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include "keys.h"
using namespace std;
void gotoxy(int, int);
void clrscr();
int main(int argc, char *argv[])
{
int x;
int y;
int n;
char ch;
// inicia o gerador de números aleatórios
srand(time(NULL));
// coloca algumas "guloseimas" na tela
for(n=0;n<20;n++) {
x = rand() % 80;
y = rand() % 26;
gotoxy(x, y);
putchar(rand() % 256);
}
// gera uma coluna e uma linha aleatórias
x = rand() % 80 + 1; // coluna entre 1 e 80
y = rand() % 23 + 1; // linha entre 1 e 24
// desenha uma "boquinha" na tela
gotoxy(x, y);
putchar('C');
while(true) {
ch = getch(); // captura a tecla pressionada
// apaga a "boquinha" da tela
gotoxy(x, y);
putchar(' ');
if ((ch == -32) || (ch == 0)) // é uma tecla de função?
{
ch = getch();
switch (ch) {
case UP_ARROW:
if(--y<1) y = 1; // para cima? diminui a linha
break;
case DOWN_ARROW:
if(++y>24) y = 24; // para baixo? aumenta a linha
break;
case LEFT_ARROW:
if(--x<1) x = 1; // para esquerda? diminui a coluna
break;
case RIGHT_ARROW:
if(++x>80) x = 80; // para direita? aumenta a coluna
break;
}
}
else
if(ch == K_ESC) break; // é Esc, então sai do programa
//clrscr();
gotoxy(x, y);
putchar('C');
gotoxy(1, 25);
printf("x:%d - y:%d ", x, y);
}
gotoxy(1, 1);
system("PAUSE");
return EXIT_SUCCESS;
}
// coloca o cursor na coluna x, linha y
void gotoxy(int x, int y) {
COORD c;
c.X = x - 1;
c.Y = y - 1;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
// limpa a tela de um jeito diferente
void clrscr() {
//printf("\033[2J");
system("CLS");
}
KEYS.H
#define K_ESC 27
// Teclas de navegação
#define HOME 71
#define PAGE_UP 73
#define END 79
#define PAGE_DOWN 81
// Teclas de seta
#define UP_ARROW 72
#define LEFT_ARROW 75
#define RIGHT_ARROW 77
#define DOWN_ARROW 80
// Teclas de função
#define F1 59
#define F2 60
#define F3 61
#define F4 62
#define F5 63
#define F6 64
#define F7 65
#define F8 66
#define F9 67
#define F10 68
// Teclas maiúsculas
#define K_A 65
#define K_B 66
#define K_C 67
#define K_D 68
#define K_E 69
#define K_F 70
#define K_G 71
#define K_H 72
#define K_I 73
#define K_J 74
#define K_K 75
#define K_L 76
#define K_M 77
#define K_N 78
#define K_O 79
#define K_P 80
#define K_Q 81
#define K_R 82
#define K_S 83
#define K_T 84
#define K_U 85
#define K_V 86
#define K_W 87
#define K_X 88
#define K_Y 89
#define K_Z 90
// Teclas minúsculas
#define K_a 97
#define K_b 98
#define K_c 99
#define K_d 100
#define K_e 101
#define K_f 102
#define K_g 103
#define K_h 104
#define K_i 105
#define K_j 106
#define K_k 107
#define K_l 108
#define K_m 109
#define K_n 110
#define K_o 111
#define K_p 112
#define K_q 113
#define K_r 114
#define K_s 115
#define K_t 116
#define K_u 117
#define K_v 118
#define K_w 119
#define K_x 120
#define K_y 121
#define K_z 122
// 124Teclas numéricas
#define K_0 48
#define K_1 49
#define K_2 50
#define K_3 51
#define K_4 52
#define K_5 53
#define K_6 54
#define K_7 55
#define K_8 56
#define K_9 57
Nenhum comentário:
Postar um comentário
Observação: somente um membro deste blog pode postar um comentário.