ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C] 기억력 게임/문자열 전광판
    공부/C 2020. 12. 13. 11:39
    conIo.h
    windows.h

     

     

    기억력 게임

    #include <stdio.h> 
    #include <windows.h>
    #include <conIo.h>	//getch()
    #include <stdlib.h>
    #include <time.h>
    #define ENTER 0x0d	//ENTER의 ASCII_CODE 
    #define ESC 0x1b	//ESC의 ASCII_CODE 
    
    // 80 25 size
    char screen[24][80];
    
    void initailize();
    void gotoxy(int x, int y);
    void cursor_off();
    char get_alphabet();
    void display_screen();
    void clear_screen();
    void play_game();
    void clear_array();
    
    void main(){
    	char ch = 0;
    	initailize();
    	while(ch != ESC){
    		gotoxy(0, 24);
    		printf("게임을 시작하려면 엔터, 종료하려면 ESC를 누르세요.");
    		ch = _getch();
    		if(ch == ENTER){
    			gotoxy(0,24);
    			printf("점수 :                                                  ");
    			play_game();
    		}
    	}
    }
    
    void initailize(){
    	srand(time(NULL));
    	cursor_off();
    }
    
    void gotoxy(int x, int y){
    	COORD Pos = {x, y};
    	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
    }
    
    void cursor_off(){
    	CONSOLE_CURSOR_INFO Coff = {100, 0};
    	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &Coff);
    }
    
    char get_alphabet(){
    	int x, y;
    	do{
    		x = rand()%80;
    		y = rand()%25;
    	}while(screen[y][x] != 0);
    	
    	screen[y][x] = rand()%26 + 65; //65~90
    	return screen[y][x];
    }
    
    void display_screen(){
    	int x,y;
    	for(y=0; y<24; y++){
    		for(x=0; x<80; x++){
    			if(screen[y][x] != 0){
    				gotoxy(x,y);
    				_putch(screen[y][x]);
    			}
    		}
    	}
    }
    
    void clear_screen(){
    	int x,y;
    	for(y=0; y<24; y++){
    		for(x=0; x<80; x++){
    			if(screen[y][x] != 0){
    				gotoxy(x,y);
    				_putch(' ');
    			}
    		}
    	}
    }
    
    void play_game(){
    	int score = 0;
    	char keyin, alphabet;
    	
    	clear_array();
    	do{
    		clear_screen();
    		Sleep(1000);
    		alphabet = get_alphabet();
    		display_screen();
    		keyin = _getch();
    		keyin = toupper(keyin);
    		if(keyin == alphabet){
    			score += 1;
    			gotoxy(7, 24);
    			printf("%2d", score);
    		}
    	}while(keyin == alphabet);
    }
    
    void clear_array(){
    	clear_screen();	//clear_screen을 한뒤, 배열screen을 지워야 과거 값이 지워진다. 
    	int i,j;
    	for(i=0; i<24; i++){
    		for(j=0; j<80; j++)
    			screen[i][j] = '\0';
    	}
    }

     

     

    문자열 전광판

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <windows.h>
    #include <conIo.h>
    #include <time.h>
    
    #define	SPACE 0x20	//ESC
    #define	ESC 0x1b	//Space bar 
    #define REFRESH_TIME 500
    
    void gotoxy(int x, int y);
    void print_string(int x, int y, const char *str, int length, int pos);
    
    char screen[25][80];
    int main()
    {
    	const char *str = "C programming is easy.";
    	int length = strlen(str);
    	int dx = (80-strlen(str))/2;
    	int dy = 12;	
    	int dir = 1;
    	int pos = 0;
    	clock_t refresh_time = 0;
    	char ch;
    	for(;;){
    		if(clock() > refresh_time){
    			print_string(dx, dy, str, length, pos);
    			refresh_time = clock() + REFRESH_TIME;
    			pos = pos + dir;
    			if(pos == length)
    				pos = 0;
    			if(pos < 0)
    				pos = length-1;
    		}
    		if(_kbhit()){
    			ch = _getch();
    			if(ch == SPACE)
    				dir = (dir == 1) ? -1 : 1;
    			if(ch == ESC)
    				break;
    		}
    	} 
    }
    
    void gotoxy(int x, int y){
    	COORD Pos = {x, y};
    	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
    }
    
    void print_string(int x, int y, const char *str, int length, int pos){
    	int n, index;
    	gotoxy(x, y);
    	for(n=0; n<length; n++){
    		index = (pos + n)%length;
    		_putch(str[index]);
    	}
    }

    '공부 > C' 카테고리의 다른 글

    과제 studentmgnt  (0) 2020.12.20
    1219C Project  (0) 2020.12.19
    linkedlist  (0) 2020.12.17
Designed by Tistory.