Thread: How to create Letter Invaders typing game in c language?

  1. #31
    Registered User
    Join Date
    Sep 2006
    Posts
    8,868
    Here's where it gets a bit sticky. I can't run Turbo C, so I'm working in the console window, not the graphics window that TC has.

    First thing, your console program should look something like this:

    Code:
    #include <stdio.h>
    #include <string.h>
    #include <conio.h>
    
    #define MAX 26
    #define yFIRST 10 
    #define yLAST 30
    
    #define VRT 179  //vertical bar
    #define HRZ 196  //horizontal bar
    #define TLC 218  //top left corner
    #define TRC 191  //top right corner
    #define BLC 192  //bottom left corner
    #define BRC 217  //bottom right corner
    #define LHC 180  //left handed T connector
    #define RHC 195  //right handed T connector
    #define UHC 193  //upward handed T connector
    #define MINI 254 //mini box
    #define NORM 220 //normal low box
    
    
    void menu(char words[MAX][20]);
    void skyline(void);
    void iplay(char words[MAX][20]);
    void clearView(void);
    
    int main()  //my system requires int main, not void main
    {
       int i,len;
       
       //hold 26 words, with up to 19 letters being the longest word possible
       char words[MAX][20]; 
       FILE *fp;
       fp=fopen("wordList.txt","r");
       if(fp == NULL) {
          printf("Error. File did not open.\n");
          return 1;
       }
       
       for(i=0;i<MAX;i++) {
          fgets(words[i],20,fp);
          len=strlen(words[i]) -1;
          if(words[i][len]=='\n')
             words[i][len]='\0';  
          //printf("%s\n",words[i]);
       }
       fclose(fp);
       
       menu(words);
       
       printf("\npress any key to continue\n");
       _getch();
       return 0;
       
    }
    void menu(char words[MAX][20])
    {
       int a,gameOn;
       char pname[25]={'\0'};  
       
       
       do {
          //clrscr();
          gameOn=0;
          _gotoxy(34,4); 
          //textcolor(RED); textbackground(WHITE);
          printf("Welcome to ");
          _gotoxy(30,6);
          printf("*******************");
          _gotoxy(30,8);
          printf("* Letter Invaders *");
          _gotoxy(30,10);
          printf("*******************");
          _gotoxy(15,14);
          if(pname[0]=='\0') {
             printf("Enter Player Name: ");
             scanf("%s",pname);
          }
          _gotoxy(15,16);
          printf("%s, What would you like to do?",pname);
          _gotoxy(18,18);
          printf("1.Play ");
          _gotoxy(18,20);
          printf("2.Quit");
          _gotoxy(15,22);
          printf("Enter your choice:");
          scanf("%d",&a);
    
          clearView();
          if(a==1) { 
             gameOn=1;
             skyline();
             //iplay(words);
          }
          else {
             //clrscr();
             gameOn=0;
             _gotoxy(25,22);
             printf("Game Over. Thanks for playing.");
          }
       }while(gameOn==1); 
       
    }
    /* I can't use clrscr(). This is my replacement. 
       You won't need this function. 
    */
    void clearView(void) { 
       int i=1;
       _gotoxy(1,i);
       for(i=1;i<30;i++) {
          //do not change the length of the next print line, (1 to 78 columns are cleared)
          printf("                                                                               ");
       }
    }
    void skyline(void) {
       int i,j,x=1,y=yLAST+1;
       unsigned char s[9][79]=
       {
        {"                              M|M                                             "},
        {"                             MNNNM                           |                "},
        {"                             1---2                           |                "},
        {" 1--2              1--2      |MMM| 1--2                    1-C-2              "},
        {" |MM|    1---2  1--BMM|      |MMM| |MM| 1-2      1--2      |MMM|  1----2 12   "},
        {" D--B 1--BMMM|  |MM|MM|  1---BMMM| |MM| |M|    1-BMM|  1-2 |MMM|  |MMMM| |42  "},
        {" |MM| |MM|MMM|  |MM|MM|  |MMM|MMM| |MM| |M|  1-3M|MM|  |MD-3MMM|  42MM13 |M|  "},
        {" |MM| |MM|MMM|  |MM|MM|  |MMM|MMM| |MM| |M|  |MMM|MM|  |M|MMMMM|   |MM|  |M|  "},
        {"-3MM4-3MM|MMM4--3MM|MM4--3MMM|MMM4-3MM4-3M4--3MMM|MM4--3M|MMMMM4---3MM4--3M4--"}
    
       };
       for(i=0;i<9;i++) {
          for(j=0;j<78;j++) {
             switch(s[i][j]) {
               case '1': s[i][j]=TLC; break;
               case '2': s[i][j]=TRC; break;
               case '3': s[i][j]=BRC; break;
               case '4': s[i][j]=BLC; break;
               case 'B': s[i][j]=LHC; break;
               case 'C': s[i][j]=UHC; break;
               case 'D': s[i][j]=RHC; break;
               case '-': s[i][j]=HRZ; break;
               case '|': s[i][j]=VRT; break;
               case 'M': s[i][j]=MINI; break;
               case 'N': s[i][j]=NORM; break;
             }
         } 
       }
          
       _gotoxy(x,y);
       for(i=0;i<9;i++) {
          printf(" %s\n",s[i]);
       }
    }
    See if you can run that in console mode. This has no game in it, just a very rough framework. Any errors or warnings from the compiler?

    Does the screen roll up or any issues at all when you enter '1' repeatedly?

    Bring your version up to where it can do this much, in console mode.

    Post up any problems you have, in your console mode.

  2. #32
    Registered User beginner_babe's Avatar
    Join Date
    Dec 2013
    Posts
    24
    Thank You soooo much Adak for helping me(I should just copy that, the amount of times I am saying it..)

    I ran the code and got some errors...but I just had to remove some underscores (Error: "_gotoxy is not defined"), make that file in the bin folder, and add some getch(); to the code....

    No, the screen does not roll up, it was overwriting on previous output, so I added a clrscr() at the beginning..Now the screen doesn't roll up when repeatedly entering 1, but the program starts from the beginning, the only exception being it does not accept input of playername, but displays the one entered in the beginning..

    Now I can run the code, but the only warning is this:-

    Warning:Parameter "words" is never used

    Also, the skyline is just great..
    Now the only problem is how to make the items fall ,& take input of it.

    Thank You
    Last edited by beginner_babe; 01-08-2014 at 07:13 AM.

  3. #33
    Registered User
    Join Date
    Sep 2006
    Posts
    8,868
    This is something you can study for the falling words. A lot of the code in menu() is REM'd out, to speed up test runs.

    I added the word "river" to the word file. Since 3 words worked well, I wanted even rows - so MAX is now increased to 27.

    You won't be able to use clrscr() in a console mode, because it will blank out the skyline, as well. Use clearView(), instead.


    Code:
    #include <stdio.h>
    #include <string.h>
    #include <time.h>
    #include <conio.h>
    
    #define MAX 27
    #define yFIRST 10 
    #define yLAST 30
    
    #define VRT 179  //vertical bar
    #define HRZ 196  //horizontal bar
    #define TLC 218  //top left corner
    #define TRC 191  //top right corner
    #define BLC 192  //bottom left corner
    #define BRC 217  //bottom right corner
    #define LHC 180  //left handed T connector
    #define RHC 195  //right handed T connector
    #define UHC 193  //upward handed T connector
    #define MINI 254 //mini box
    #define NORM 220 //normal low box
    
    #define PAUSE 2  //pause between descending loops
    
    //each hun[] element, is made up of this struct
    struct invaders {
       char wrd[20];
       int x;
       int y;
    };
    
    void menu(char words[MAX][20]);
    void skyline(void);
    int iplay(char words[MAX][20]);struct invaders huns[20];
    void clearView(void);
    
    int main()  //my system requires int main, not void main
    {
       int i,len;
       
       char words[MAX][20]; 
       
       FILE *fp;
       fp=fopen("wordList.txt","r");
       if(fp == NULL) {
          printf("Error. File did not open.\n");
          return 1;
       }
       
       for(i=0;i<MAX;i++) {
          fgets(words[i],20,fp);
          len=strlen(words[i]) -1;
          if(words[i][len]=='\n')
             words[i][len]='\0';  
          //printf("%s\n",words[i]);
       }
       fclose(fp);
       
       menu(words);
       
       printf("\npress any key to continue\n");
       //_getch();
       return 0;
       
    }
    void menu(char words[MAX][20])
    {
       int a,gameOn;
       char pname[25]={"al"};  //'\0'};  
       
       
       do {
          //clrscr();
          gameOn=0;
          _gotoxy(34,4); 
          //textcolor(RED); textbackground(WHITE);
          printf("Welcome to ");
          _gotoxy(30,6);
          printf("*******************");
          _gotoxy(30,8);
          printf("* Letter Invaders *");
          _gotoxy(30,10);
          printf("*******************");
          /*
          _gotoxy(15,14);
          if(pname[0]=='\0') {
             printf("Enter Player Name: ");
             scanf("%s",pname);
          }
          _gotoxy(15,16);
          printf("%s, What would you like to do? ",pname);
          _gotoxy(18,18);
          printf("1.Play ");
          _gotoxy(18,20);
          printf("2.Quit");
          _gotoxy(15,22);
          printf("Enter your choice:");
          scanf("%d",&a);
          
          */
          a=1;
          clearView();
          if(a==1) { 
             gameOn=1;
             skyline();
             iplay(words);
          }
          else {
             //clrscr();
             gameOn=0;
             _gotoxy(25,22);
             printf("Game Over. Thanks for playing.");
          }
          gameOn=0;
       }while(gameOn==1); 
       
    }
    int iplay(char words[MAX][20]) {
       struct invaders huns[MAX];  
       int i,j;
       
       /* sets the initial x and y values for all the words that will be displayed */
       j=yFIRST;
       for(i=0;i<MAX;i+=3) {          //words are grouped in sets, three words per row
          strcpy(huns[i].wrd,words[i]);
          strcpy(huns[i+1].wrd,words[i+1]);
          strcpy(huns[i+2].wrd,words[i+2]);
          huns[i].x=8;
          huns[i].y=j;
          huns[i+1].x=40- (strlen(huns[i+1].wrd)/2);
          huns[i+1].y=j;
          huns[i+2].x=72- strlen(huns[i+2].wrd);
          huns[i+2].y=j;
          ++j;
       }
       for(j=0;j<MAX;j++) {           //displays the words at their highest position on-screen
          _gotoxy(huns[j].x,huns[j].y);
          printf("%s",huns[j].wrd);
       }
       
       do {                           //causes the words to descend, row by row
          for(i=MAX-3;i>=0;i-=3) {    //clears the current row of words
             _gotoxy(huns[i].x,huns[i].y);
             _clreol();
             for(j=i;j<i+3;j++) {     //prints the current row of words
                huns[j].y++;          //and updates the words y value 
                _gotoxy(huns[j].x,huns[j].y);
                printf("%s",huns[j].wrd);
             }
             _sleep(1);               //slows it down so you can play
          }
       
       }while(huns[j].y < yLAST);
    
       return 0;
    }   
    void clearView(void) { 
       int i=1;
       _gotoxy(1,i);
       for(i=1;i<30;i++) {
          //do not change the length of the next print line, (1 to 78 columns are cleared)
          printf("                                                                               ");
       }
    }
    void skyline(void) {
       int i,j,x=1,y=yLAST+1;
       unsigned char s[9][79]=
       {
        {"                              M|M                                             "},
        {"                             MNNNM                           |                "},
        {"                             1---2                           |                "},
        {" 1--2              1--2      |MMM| 1--2                    1-C-2              "},
        {" |MM|    1---2  1--BMM|      |MMM| |MM| 1-2      1--2      |MMM|  1----2 12   "},
        {" D--B 1--BMMM|  |MM|MM|  1---BMMM| |MM| |M|    1-BMM|  1-2 |MMM|  |MMMM| |42  "},
        {" |MM| |MM|MMM|  |MM|MM|  |MMM|MMM| |MM| |M|  1-3M|MM|  |MD-3MMM|  42MM13 |M|  "},
        {" |MM| |MM|MMM|  |MM|MM|  |MMM|MMM| |MM| |M|  |MMM|MM|  |M|MMMMM|   |MM|  |M|  "},
        {"-3MM4-3MM|MMM4--3MM|MM4--3MMM|MMM4-3MM4-3M4--3MMM|MM4--3M|MMMMM4---3MM4--3M4--"}
    
       };
       for(i=0;i<9;i++) {
          for(j=0;j<78;j++) {
             switch(s[i][j]) {
               case '1': s[i][j]=TLC; break;
               case '2': s[i][j]=TRC; break;
               case '3': s[i][j]=BRC; break;
               case '4': s[i][j]=BLC; break;
               case 'B': s[i][j]=LHC; break;
               case 'C': s[i][j]=UHC; break;
               case 'D': s[i][j]=RHC; break;
               case '-': s[i][j]=HRZ; break;
               case '|': s[i][j]=VRT; break;
               case 'M': s[i][j]=MINI; break;
               case 'N': s[i][j]=NORM; break;
             }
         } 
       }
          
       _gotoxy(x,y);
       for(i=0;i<9;i++) {
          printf(" %s\n",s[i]);
       }
    }

  4. #34
    Lurking whiteflags's Avatar
    Join Date
    Apr 2006
    Location
    United States
    Posts
    9,612
    Adak, I really hope you're having fun programming all of this yourself so that the OP can hand it in.

  5. #35
    Registered User
    Join Date
    Sep 2006
    Posts
    8,868
    I did wrestle with that concern. Three things made me change my mind about it:


    First - the assignment uses a graphic window, not a console one, so a lot of changes will have to be made by the OP.

    Second - anti plagiarism software used in Universities, on a popular site like this, would catch what you describe.

    Third - have you tried Googling for "words descending down toward a skyline in Turbo C"? Pretty slim picking's wouldn't you say?. So the OP would have to go to a web site like StackOverflow, and get somebody to show them how to do it. And very few of them ever used Turbo C, in the last 20 years. And if that's true, why not show them here? At least, in console mode?


    If the OP could use Windows, the balance would shift noticeably, but Turbo C?

    Most of the code is just re-hashed from a Spanish Verbs learning game that the OP inspired with her first post.

  6. #36
    Registered User beginner_babe's Avatar
    Join Date
    Dec 2013
    Posts
    24
    I can't say how thankful I am for your help, Adak. Really, Thank You for taking the time to help me...

    I'll need time to study this..
    You've solved a huge problem for me, that of how to make the items fall.
    I'll study it, and post if I have any problems...I'm sure I'll be able to learn it and code the program so as to get the desired output.

    Can you just hint as to how to take the input from player & compare it?
    I really appreciate your help a lot.
    Thank You.

  7. #37
    Registered User
    Join Date
    Jun 2011
    Posts
    4,513
    I'm beginning to sense a "Help Vampire" situation here.

    Can you just hint as to how to take the input from player & compare it?
    fgets()
    strcmp()

  8. #38
    Registered User beginner_babe's Avatar
    Join Date
    Dec 2013
    Posts
    24
    Quote Originally Posted by Matticus View Post
    I'm beginning to sense a "Help Vampire" situation here.

    I'm sorry if you do, but its not.It's fine if you don't wanna help, but there's no need to be mean about it.I'm not forcing anyone to help me, you always have a choice.I just need a hint.I'm embarrased, and I'd not ask if I didn't need help.
    Please, don't help if you think its a help vampire situation.

  9. #39
    Registered User
    Join Date
    Sep 2006
    Posts
    8,868
    Inside the descending for loop, you might use

    if (kbhit())
    ...get the key that was pressed
    ...In a for loop, check each word from bottom to top
    ...and see if any of them have that letter as the huns[i].word[count] letter.
    ...if so, change the color, and if all the letters have been pressed for
    ...that word, then shoot it into oblivion with the Anti-Aircraft Gun.

    Check your excellent help menu for kbhit(). I believe you need to take each letter, one at a time for this game, instead of entire words, right?

    May need to add a struct member to facilitate this. I'll have to think about it when I'm not so tired.

  10. #40
    Registered User beginner_babe's Avatar
    Join Date
    Dec 2013
    Posts
    24
    Yes its each letter one at a time.....I'll need some time but I will work on the hint & post up my code as soon as possible, as the help menu in my PC is not opening all of a sudden...so I'll do from somewhere else but I'll post up soon.

  11. #41
    Registered User beginner_babe's Avatar
    Join Date
    Dec 2013
    Posts
    24
    So here is the code I came up with...just the essential bits posted here...
    Code:
    #include <stdio.h>
    #include <string.h>
    #include <time.h>
    #include <conio.h>
    
    
    #define MAX 27
    #define yFIRST 10
    #define yLAST 30
    
    
    #define VRT 179  //vertical bar
    #define HRZ 196  //horizontal bar
    #define TLC 218  //top left corner
    #define TRC 191  //top right corner
    #define BLC 192  //bottom left corner
    #define BRC 217  //bottom right corner
    #define LHC 180  //left handed T connector
    #define RHC 195  //right handed T connector
    #define UHC 193  //upward handed T connector
    #define MINI 254 //mini box
    #define NORM 220 //normal low box
    #define SCEP 527 
    #define TRE 669
    
    
    void skyline(void);
    void fallchar();
    int main()
    {       clrscr();
        printf("Press any key....");
        getch();
        clrscr();
        skyline();
        fallchar();
        getch();
        return 0;
    }
    void skyline(void) {
       int i,j,x=1,y=yLAST+1;
       unsigned char s[9][79]=
       {
        {"                              M|M                                             "},
        {"                             MNNNM                           S                "},
        {"                             1---2                           T                "},
        {" 1--2              1--2      |MMM| 1--2                    1-C-2              "},
        {" |MM|    1---2  1--BMM|      |MMM| |MM| 1-2      1--2      |MMM|  1----2 12   "},
        {" D--B 1--BMMM|  |MM|MM|  1---BMMM| |MM| |M|    1-BMM|  1-2 |MMM|  |MMMM| |42  "},
        {" |MM| |MM|MMM|  |MM|MM|  |MMM|MMM| |MM| |M|  1-3M|MM|  |MD-3MMM|  42MM13 |M|  "},
        {" |MM| |MM|MMM|  |MM|MM|  |MMM|MMM| |MM| |M|  |MMM|MM|  |M|MMMMM|   |MM|  |M|  "},
        {"-3MM4-3MM|MMM4--3MM|MM4--3MMM|MMM4-3MM4-3M4--3MMM|MM4--3M|MMMMM4---3MM4--3M4--"}
    
    
       };
       for(i=0;i<9;i++) {
          for(j=0;j<78;j++) {
         switch(s[i][j]) {
           case '1': s[i][j]=TLC; break;
           case '2': s[i][j]=TRC; break;
           case '3': s[i][j]=BRC; break;
           case '4': s[i][j]=BLC; break;
           case 'B': s[i][j]=LHC; break;
           case 'C': s[i][j]=UHC; break;
           case 'D': s[i][j]=RHC; break;
           case '-': s[i][j]=HRZ; break;
           case '|': s[i][j]=VRT; break;
           case 'M': s[i][j]=MINI; break;
           case 'N': s[i][j]=NORM; break;
           case 'S': s[i][j]=SCEP; break;
           case 'T': s[i][j]=TRE; break;
         }
         }
       }
    
    
       gotoxy(x,y);
       for(i=0;i<9;i++) {
          printf(" %s\n",s[i]);
          }
    }
    void fallchar()
    {       int i,a,b,c,x1=10,x2=33,x3=42,y1=4,y2=4,y3=4,k,key; //I have to reduce the variables, but that can be done later
        char p[10]={"Smile"},q[10]={"Life"},r[10]={"Lovely"},get[5];
        for(i=4;i<=38;i++) //the main loop
        {    for(a=0;a<1;a++)         //member loops for each word
            {    gotoxy(x1,y1-1);
                clreol();
                gotoxy(x1,y1);
                puts(p);
                delay(50);
                y1++;
            }
               if(i>=6)                //this will delay the execution of this loop,so that 
               {for(b=0;b<1;b++)  //clreol() doesn't wipe other words out
            {    gotoxy(x2,y2-1);
                clreol();
                gotoxy(x2,y2);
                puts(q);
                delay(50);
                y2++;
            }
               }
               if(i>=7)
               {for(c=0;c<1;c++)
            {    gotoxy(x3,y3-1);
                clreol();
                gotoxy(x3,y3);
                puts(r);
                delay(50);
                y3++;
            }
               }
    //Below is the erroneous code...      
    /*   if(kbhit()); 
               {    for(k=0;k<=4;k++){
                get[k]=getch();
                }
                if(get[0]=p[0])
                {if(strcmp(p,get)==0)
                 {   a==3;
                 }
                }
                else if(get[0]=q[0])
                {if(strcmp(q,get)==0)
                 {   b==3;
                 }
                }
                else if(get[0]=r[0])
                {if(strcmp(r,get)==0)
                 {   c==3;
                 }
                }
            } */
        }
    getch();
    }
    I observed the game & was able to nail exactly how the items fell during the game.
    But the input of items is to be taken as the items fall. So,how to get input while the loop runs is a bit problematic..Also, it seems I've made some mistake in using kbhit()...the erroneous code is in the comment lines 114 to 133.
    Last edited by beginner_babe; 01-12-2014 at 08:18 AM.

  12. #42
    Registered User
    Join Date
    Sep 2006
    Posts
    8,868
    This is an overly complex function, but it works well in limited testing.

    huns= an array of struct with char word, int x, int x, and int colored
    MAX is the number of structs in the huns array.

    Code:
       do {                           //causes the words to descend, row by row
          for(i=MAX-3,n=MAX-3;i>=MAX-6;i-=3,n-=6) {    //clears the current row of words  was 0
             _gotoxy(huns[i].x,huns[i].y);
             _clreol();
             for(j=i;j<i+3;j++,n++) {     //prints the current row of words
                huns[j].y++;              //and updates the words y value 
                
                _gotoxy(huns[j].x,huns[j].y);
              //prints the words - all colored letters in the first
              //while loop. Non-colored letters in the second one.
                k=0;
                _textcolor(12);             //bright red colored text
                while(k<huns[n].colored) {  //while the word has been colored so far
                   putchar(huns[n].wrd[k]); //put the char in red
                   ++k;
                }
                _textcolor(7);              //light grey colored text
                while(huns[n].wrd[k]) {     //while the word has NOT been colored so far
                   putchar(huns[n].wrd[k]); //put the char in light grey
                   ++k;
                }
    
             }
             
             start=clock();
    
             do {
                _gotoxy(inputX,inputY);
                c=' ';
                if(_kbhit()) {
                   printf("          "); //erase previous letters may be more than one
                   _gotoxy(inputX,inputY); //return to output position
                   c=_getche();
                }
                
                if(c=='q') {          //check for player wanting to quit
                   quit=1;
                   return 0;          //return if q has been pressed
                }
                
                if(c==huns[wordNum].wrd[letrNum]) {
                   _gotoxy(huns[wordNum].x+letrNum,huns[wordNum].y);
                   _textcolor(12); 
                   putchar(huns[wordNum].wrd[letrNum]);
                   _textcolor(7);
                   
                   ++huns[wordNum].colored;
                   ++letrNum;
                   if(!huns[wordNum].wrd[letrNum]) {
                      ++wordNum;
                      letrNum=0;
                   }
                   if(wordNum % MAX ==0)
                      wordNum-=6;
              
                }      
                stop=clock();         //update the time
                if(stop<start)        //purely defensive
                   break;
             //without the cast to double, integer division results and wrecks the math
    
             }while(((double)(stop-start)/CLOCKS_PER_SEC) < delay);
    
             _gotoxy(inputX,inputY);
             putchar(' ');
             c=' ';
          }
       
       }while(huns[j].y < yLAST && wordNum>-1);
    
       return 0;
    }
    The words have to be entered, in order, from left to right, and from bottom row to the top one. (Since the bottom row will destroy the city first if not shot). The letters have to be entered also, in order.

    This doesn't destroy the city or shoot the words, it just colors the keys that are pressed, if they match up. Once a words letters are matched and become colored, they stay colored even if they descend to another row before all the letters have been entered.

    The delay should be set between 0.5 seconds and 2.0 seconds.

    In your code, remove strcmp(), you need to compare ONE char, not a string. Remove the semi-colon at the end of the if() line of code, also. Study how the above is laid out.

    Most of the program's time is spent within the inner do while loop, so the keyboard input can be picked up quickly, and the letter changed if it's a match.
    Last edited by Adak; 01-12-2014 at 10:58 AM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. How to make a Typing Tutor game?
    By santuno in forum C Programming
    Replies: 8
    Last Post: 07-25-2009, 02:09 AM
  2. Create some animation using C language??
    By neo_lam in forum C Programming
    Replies: 3
    Last Post: 11-21-2006, 07:20 AM
  3. Need help on my Space Invaders Game
    By zz3ta in forum Game Programming
    Replies: 6
    Last Post: 01-04-2004, 04:32 PM
  4. Typing Tutor Game
    By sowhat82 in forum Game Programming
    Replies: 3
    Last Post: 02-17-2003, 03:57 PM
  5. Galaxian or Space invaders for my next game (read this)
    By Leeman_s in forum C++ Programming
    Replies: 7
    Last Post: 11-07-2001, 09:28 PM