游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2667|回复: 1

wrong program

[复制链接]

3

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2003-11-14 02:35:00 | 显示全部楼层 |阅读模式
//  A game fragment taken from Andre La Mothe's book

//        The Black Art of 3D Games Programming


// PROG2_1.CPP - A simple console based game to illustrate
// a generic game loop

// INCLUDES ///////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
#include <windows.h>
#include <time.h>

// DEFINES ////////////////////////////////////////////////

#define MAX_X        77  // maximum x position for player
#define SCROLL_POS   24  // the point that scrolling occurs

// PROTOTYPES /////////////////////////////////////////////

void Init_Graphics(void);
inline void Set_Color(int fcolor, int bcolor);
inline void Draw_String(int x,int y, char *string);

// GLOBALS ////////////////////////////////////////////////

CONSOLE_SCREEN_BUFFER_INFO con_info;   // holds screen info

HANDLE hconsole;         // handle to console
int    game_running = 1; // state of game, 0=done, 1=run

// FUNCTIONS //////////////////////////////////////////////

void Init_Graphics(void)
{
// this function initializes the console graphics engine

COORD console_size = {80,25}; // size of console

// seed the random number generator with time
srand((unsigned)time(NULL));

// open i/o channel to console screen
hconsole=CreateFile("CONOUT$",GENERIC_WRITE | GENERIC_READ,
         FILE_SHARE_READ | FILE_SHARE_WRITE,
         0L, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0L);

// make sure we are in 80x25
SetConsoleScreenBufferSize(hconsole,console_size);

// get details for console screen                       
GetConsoleScreenBufferInfo(hconsole,&con_info);

} // end Init_Graphics

///////////////////////////////////////////////////////////

inline void Set_Color(int fcolor, int bcolor=0)
{
// this function sets the color of the console output
SetConsoleTextAttribute(hconsole,(WORD)((bcolor << 4) |
                        fcolor));

} // Set_Color

///////////////////////////////////////////////////////////

inline void Draw_String(int x,int y, char *string)
{
// this function draws a string at the given x,y

COORD cursor_pos; // used to pass coords

// set printing position
cursor_pos.X = x;
cursor_pos.Y = y;
SetConsoleCursorPosition(hconsole,cursor_pos);

// print the string in current color
printf("%s",string);

} // end Draw_String

///////////////////////////////////////////////////////////

inline void Clear_Screen(void)
{
// this function clears the screen

// set color to white on black
Set_Color(15,0);

// clear the screen
for (int index=0; index<=25; index++)
    Draw_String(0, SCROLL_POS,"\n");

} // end Clear_Screen

// MAIN GAME LOOP /////////////////////////////////////////

void main(void)
{
char key;            // player input data
int  player_x = 40;  // player's x position

// SECTION: initialization

// set up the console text graphics system
Init_Graphics();

// clear the screen
Clear_Screen();

// SECTION: main event loop, this is where all the action  
// takes place, the general loop is erase-move-draw

while(game_running)
     {
     // SECTION: erase all the objects or clear screen

     // nothing to erase in our case   

     // SECTION: get player input
     if (kbhit())
        {
        // get keyboard data, and filter it
        key = toupper(getch());

        // is player trying to exit, if so exit
        if (key=='Q' || key==27)
           game_running = 0;

        // is player moving left        
        if (key=='A')
           player_x--;
           
        // is player moving right
        if (key=='S')
           player_x++;

        } // end if   

     // SECTION: game logic and further processing
     
     // make sure player stays on screen
     if (++player_x > MAX_X)
        player_x=MAX_X;     

     if (--player_x < 0)
        player_x=0;     

     // SECTION: draw everything

     // draw next star at random position
     Set_Color(15,0);
     Draw_String(rand()%80, SCROLL_POS,".\n");
     
     // draw player
     Set_Color(rand()%15,0);
     Draw_String(player_x,0,"<-*->");
     Draw_String(0,0,"");   

     // SECTION: synchronize to a constant frame rate
     Sleep(100);   

     } // end while

// SECTION: shutdown and bail
Clear_Screen();

printf("\nG A M E  O V E R \n\n");

} // end main
               


how to improve it ??help me ~~>+*.*+< [em4] [em4] [em4] [em4]

37

主题

378

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
发表于 2003-11-14 17:58:00 | 显示全部楼层

Re:wrong program

What kind of mistake do you think is in this module???
What's your goal by the word "improve"???
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-24 03:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表