728x90

예전 카페에서 폐지 공지가 와서 자료를 옮겨 놓습니다.

다른 여러 언어로 제어문 연습하기 좋은 간단한 로직이라 생각되네요


예제코드만 남아있었네요. 코드를 보고 읽는 것도 연습이 되니 문제가 코드에서 잘 나왔는지 확인해보시고, 거꾸로 문제를 보고 코드를 만들어 보는 것도 추천합니다.

 

코드에서 문제 추출 내용

더보기

2~4 자리의 입력받아서 갯수만큼 임의의 정수(1~9 사이 수 생성)를 생성하고 해당 갯수의 수을 9번까지 입력받아서 같은 자리에 숫자가 맞으면 스트라익, 다른 자리에 나오면 볼, 다른수면 아웃처리해서 알려준다.

C로 구현코드

더보기
#include "stdio.h"
#include "stdlib.h"
#include "time.h"


void main()
{
 // 자릿수 변수 cc
 // 카운터 변수 : 스트라익 cs, 볼 cb, 아웃 co
 int a[5]={0},b[5]={0};
 int cc, cs, cb, co;
 int i, j, k;   //for문  i,j 게임진행으로 인한 횟수 k
 char Yn=1;

StartGame:
 //게임 시작

 printf("\t********************\n");
 printf("\t****숫자야구게임****\n");
 printf("\t********************\n\n\n");

 printf("게임규칙 :  9회 이전에 3진을 ^^\n\n\n");
 
 // 숫자 갯수 입력
 while(1){
 printf("숫자갯수 선택(2~4):");
 scanf("%d",&cc);
 // 자릿수 검정 :유효값 확인및 재입력 요청
 if(cc>=2&&cc<=4) break;
 else printf("\n -.-;; 2~4 사이의 숫자를 입력하세요\n");

 }

 //***** 게임 시작 숫자 입력과 카운터*****

 printf("\n\t      PLAY BALL\n");

// 임의의 수 생성 
 srand( (unsigned) time (NULL));     //rand 초기화
 for(i=1; i<=cc; i++)
 {
  a[i]=rand()%10;        //1~9 사이 수 생성
 }
 // 유효값 확인
 while(1){

  Yn=0;
  for(i=1;i<=cc;i++)
  {
   for(j=i+1;j<=cc;j++)
   {
    if(a[i]==a[j])a[j]=rand()%10;
    if(a[i]!=a[j])Yn++;
   }
//  printf("%d 번째 수 : %d \t\n", i, a[i]); //버그 수정용 출력
  }
  if(Yn>=(cc-1))break;
 }

//1회부터 9회까지

 for(k=1;k<10;k++)
 {
  //초기화
  cs=0; cb=0; co=0;
  // 숫자 입력
  printf("%d 개의 수를 입력해주세요\n",cc);
  for(i=1;i<=cc;i++) 
  {
   scanf("%d",&b[i]);
  }

  // 입력 숫자 처리
  for(i=1;i<=cc;i++)
  {
   for(j=1;j<=cc;j++)
   {
    if(a[i]==b[j])
    {
     if(i==j){cs++;}else {cb++;}
    }
   }
  }
  co=cc-cs-cb;

  // 처리 결과 출력
  printf("\n %d 회\n",k );
  if(cs!=0)
   printf("\t %d 스트라이크",cs);
  if(cb!=0)
   printf("\t %d 볼",cb);
  if(co!=0)
   printf("\t %d 아웃",co);

  printf("\n");
  // 게임 종료 규칙 확인 후 종료
  if(cs==cc) break;
  if(k==9) printf("\n 9회까지 끝났습니다.");

 }

 // 새게임 확인후 재시작 또는 게임종료

 printf("\n재시작 하시겠습니까?%(재시작=3%)");
 scanf("%d",&Yn);
 if(Yn==3) goto StartGame;


}
728x90
728x90

다음 카페에 자주 안들어가다보니 자료 이관합니다.


GetSystemMetrics(SM_CXSCREEN);
GetSystemMetrics(SM_CYSCREEN);

보너스로 작업표시줄 제외한 크기를 구할려면 아래와 같이...

CRect rcDesktop;
 ::SystemParametersInfo(SPI_GETWORKAREA,0,&rcDesktop,0);

화면 사이즈를 변경 할려면 다음과 같이...

    DEVMODE mode ;
    mode.dmBitsPerPel = 32;           // 32비트 칼라로 변경
    mode.dmPelsWidth  = 1024;       
    mode.dmPelsHeight = 768;
    mode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
    ChangeDisplaySettings(&mode, CDS_FULLSCREEN  );

728x90

'OLD카페자료갱신 > VC++&OOP' 카테고리의 다른 글

API (2004.10.06)  (0) 2025.04.28
oop (2004.10.01)  (0) 2025.04.28
C++ (2004.09.30)  (0) 2025.04.28
728x90

다음 카페에 자주 안들어가다보니 자료 이관합니다.

#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
char szName[255]="API";
COLORREF wbgCol=RGB(180,250,180);
HINSTANCE g_hInst;
//옵션 변수
int x,y,x1,y1;
RECT rect[4];

char change[30];
// 옵션 변수 끝
int WINAPI WinMain(HINSTANCE hInstance,  //윈도우 고유 id
       HINSTANCE hPrevInstance, //전에 뜬 창값---안쓴다..
       LPSTR lpCmdLine,   //포인터 문자를 가져온다. lpCmdLine=명령줄인수
       int mShowCmd)   // 창보이는방법 sw_show,minmize,maxmize,sw_hide
{

 g_hInst=hInstance;
 MSG msg;           //베시지 객체 생성
 WNDCLASS wnd;          //윈도우 클래스 객체의 생성
 wnd.cbClsExtra=0;
 wnd.cbWndExtra=0;
 wnd.hbrBackground=CreateSolidBrush(wbgCol); //창 바탕화면
 wnd.hCursor=LoadCursor(NULL,IDC_ARROW);    //마우스 커서
 wnd.hIcon=LoadIcon(NULL,IDI_APPLICATION);   //제목줄 프로그램 대표 그림..
 wnd.lpszClassName=szName;       //윈도우이름
 wnd.lpszMenuName=NULL;        //메유없음
 wnd.lpfnWndProc=WndProc;       //선언한..콜백함수명
 wnd.hInstance=hInstance;       //선언한..윈도우 고유 ID
 wnd.style=CS_HREDRAW|CS_VREDRAW;     //윈도우 가로세로 크기변경시 새로고침

 RegisterClass(&wnd);        //레지스트에 등록
 HWND hwnd=CreateWindow(szName,  // 윈도우 이름
  szName,       // 윈도우 제목
  WS_POPUP ,     // 창크기 메뉴
  100,50,900,650,     //시작지점과 크기
  NULL,
  NULL,       //
  hInstance,
  NULL);

 ShowWindow(hwnd, SW_SHOW);
 while(GetMessage(&msg,0,0,0)){  //메세지 감시
  
  if(GetAsyncKeyState(VK_ESCAPE)) break;  //ESC눌리면 창닫기
  // GetAsyncKeyState 키 눌린상태 확인 함수


  TranslateMessage(&msg); // 키보드 사용을 허용한다.
  DispatchMessage(&msg); // 윈도우에 제어 요소를 반환


 }
 return 0;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 HDC hdc;     //그래픽 툴 구조체
 PAINTSTRUCT ps;    // 글씨 출력 도움 구조체
 //옵션
 int i=0;

 //옵션끝
 switch(uMsg)
 {
 case WM_DESTROY:  //창 닫기
  PostQuitMessage(0);
  break;
 case WM_SIZE:
  for(i=0;i<4;i++)
  {
   SetRect(&rect[i],50+100*i+10*i,50,150+100*i+10*i,100); // rect 설정
  }
  break;  
 case WM_PAINT:
  hdc=BeginPaint(hwnd,&ps);
  for(i=0;i<4;i++)
  {
   Rectangle(hdc,rect[i].left,rect[i].top,rect[i].right,rect[i].bottom);//렉 그리기
//   DrawText(hdc,&rText[i],6,&rect[i],DT_CENTER|DT_VCENTER|DT_SINGLELINE);

  }
  DrawText(hdc,"계산기",6,&rect[0],DT_CENTER|DT_VCENTER|DT_SINGLELINE);
  DrawText(hdc,"메모장",6,&rect[1],DT_CENTER|DT_VCENTER|DT_SINGLELINE);
  DrawText(hdc,"그림판",6,&rect[2],DT_CENTER|DT_VCENTER|DT_SINGLELINE);
  DrawText(hdc,"카드놀이",8,&rect[3],DT_CENTER|DT_VCENTER|DT_SINGLELINE);
  EndPaint(hwnd,&ps);
  break;
 case WM_LBUTTONDOWN:
  {
   POINT point;
   point.x=LOWORD(lParam);
   point.y=HIWORD(lParam);
   for(i=0;i<4;i++)
   {
    if(PtInRect(&rect[i],point))
    {
     if(i==0)WinExec("c:\\winnt\\system32\\calc.exe",SW_SHOW);
     if(i==1)WinExec("c:\\winnt\\system32\\notepad.exe",SW_SHOW);
     if(i==2)WinExec("c:\\winnt\\system32\\mspaint.exe",SW_SHOW);
     if(i==3)WinExec("c:\\winnt\\system32\\sol.exe",SW_SHOW);
    }
   }

  }
  break;
 }
 return DefWindowProc(hwnd,uMsg,wParam,lParam);

 //return 0;
}
728x90

'OLD카페자료갱신 > VC++&OOP' 카테고리의 다른 글

화면정보 가져오기 MFC (2005.03.31)  (0) 2025.04.28
oop (2004.10.01)  (0) 2025.04.28
C++ (2004.09.30)  (0) 2025.04.28
728x90

다음 카페에 자주 안들어가다보니 자료 이관합니다.

728x90

'OLD카페자료갱신 > VC++&OOP' 카테고리의 다른 글

화면정보 가져오기 MFC (2005.03.31)  (0) 2025.04.28
API (2004.10.06)  (0) 2025.04.28
C++ (2004.09.30)  (0) 2025.04.28

+ Recent posts