Usuários online

sexta-feira, 11 de novembro de 2011

Introdução a Algoritmos - Aula 11/11/2011 (Um "Joguinho" Tipo Come-Come)

Um "Joguinho" Tipo Come-Come

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.

LinkWithin

Related Posts Plugin for WordPress, Blogger...

NOSSO OBJETIVO

OBJETIVO

Este blog será usado para divulgação de minhas ideias, notícias sobre tecnologia, disponibilização de links para download de materiais diversos (incluindo materiais didáticos -- que poderão ser usados em minhas aulas e/ou cursos). Gostaria de DEIXAR BEM CLARO que quaisquer materiais disponibilizados através deste blog são, tão somente, para acompanhamento de aulas e/ou cursos, e não constituem de modo algum, aulas na modalidade "ensino à distância" (EAD). Alunos têm total acesso aos materiais disponíveis, mas somente como tutoriais passo a passo. Apostilas disponibilizadas através deste blog não são materiais obrigatórios em disciplinas cursadas ou cursos ministrados.

RESPONSABILIDADE

O autor deste blog não é responsável pelo mau uso, intencional ou não, de qualquer código de programa disponibilizado aqui. Os códigos de programas disponíveis neste blog para download é e serão sempre, e tão somente, para uso didático durante o aprendizado. Seja bem-vindo.