-
[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' 카테고리의 다른 글
[C] 키오스크 - IEC61508 위배 코드 (0) 2023.08.04 과제 studentmgnt (0) 2020.12.20 1219C Project (0) 2020.12.19 linkedlist (0) 2020.12.17