모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 게시물ID : programmer_17535
    작성자 : 토왕
    추천 : 0
    조회수 : 3650
    IP : 122.44.***.185
    댓글 : 4개
    등록시간 : 2016/06/08 16:45:46
    http://todayhumor.com/?programmer_17535 모바일
    c++갤러그 소스분석중인데..
    옵션
    • 본인삭제금지
    #include <iostream> // 80,23
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    #include <windows.h>
    #include <cstdio>
    #include "Player.h"
    #include "Enemy.h"
    #include "Bullet.h"
    #include "Game.h"

    #define SCREENX 80 // 화면 넓이
    #define SCREENY 24 // 화면 높이
    #define delay(n) Sleep(n) // n/1000초만큼 시간 지연
    #define ENEMYNUM 35 // 적기, 적총알 수
    using namespace std;

    void main()
    {
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); // 핸들값 얻어오기
    Game *game;
    Player *player;
    CBullet *pbullet;
    CBullet *pDelBullet;
    Enemy *enemy[ENEMYNUM];
    CBullet *ebullet[ENEMYNUM];
    clock_t startTime, endTime;
    int count; // 프레임 카운트
    int i;
    int selectMenu;
    startTime = clock();
    // 메뉴 선택 변수
    bool cur_key = false; // 총알 발사 체크 변수
    bool old_key = false;
    bool check = 1; // 플레이어 총알 삭제 체크 변수
    CBullet *bullet_head = NULL; // 플레이어 총알 linked list 헤트
    CBullet *bullet_tail = NULL; // 플레이어 총알 linked list 테일

    for(;;)
    {
    SetConsoleTextAttribute(hStdOut, FOREGROUND_INTENSITY);
    cout<<endl<<endl<<endl<<endl<<endl;
    cout<<"\t\t//////////////////////////"<<endl;
    cout<<"\t\t//      난 이 도        //"<<endl;
    cout<<"\t\t//////////////////////////"<<endl;
    cout<<"\t\t//                      //"<<endl;
    cout<<"\t\t//      1. Easy         //"<<endl;
    cout<<"\t\t//                      //"<<endl;
    cout<<"\t\t//      2. Nomal        //"<<endl;
    cout<<"\t\t//                      //"<<endl;
    cout<<"\t\t//      3. Hard         //"<<endl;
    cout<<"\t\t//                      //"<<endl;
    cout<<"\t\t//      4. Exit         //"<<endl;
    cout<<"\t\t//////////////////////////"<<endl;
    cout<<"\t\t선택 하세요 : ";
    cin>>selectMenu;

    //////////////////////////////////////////////////////////////////////////////////
    //
    // 게임 초기화
    game = new Game(selectMenu);
    player = new Player(1,"<<A>>", SCREENX/2, SCREENY);
    game->SetCursorType(NOCURSOR); // 화면 에서 커서 안보이게함
    game->ScreenClear(); // 화면 지우기
    count = 0;
    for(i =0; i< ENEMYNUM; i++)
    {
    enemy[i] =NULL; // 적 객체 초기화
    ebullet[i] = NULL; // 적 총알 객체 초기화
    }

    if(selectMenu == 4) // 메뉴중 4번 이 선택되었을시 
    exit(0); // 종료


    //////////////////////////////////////////////////////////////////////////////////
    // 게임루프 시작
    for(;;)
    {
    //////////////////////////////////////////////////////////////////////////////////
    // 키 입력에 따른 처리
    game->KeyPress(); // 키입력
    if(!(player->GetExist())) // 플레이어가 죽지 않았을경우
    {
    if( (game->GetLeftMove() == 1) && (player->GetX() > 0))
    player->MoveXY(-2,0); // 왼쪽 화살표를 눌렀을 경우 왼쪽으로 이동
    else if( (game->GetRightMove() == 1) && (player->GetX() < 74))
    player->MoveXY(2,0); // 오른쪽 화살표를 눌렀을 경우 오른쪽으로 이동
    if( (game->GetUpMove() == 1) && (player->GetY() > 0))
    player->MoveXY(0,-1); // 윗쪽 화살표를 눌렀을 경우 위로 이동
    else if( (game->GetDownMove() == 1) && (player->GetY() < 23))
    player->MoveXY(0,1); // 아랫쪽 화살표를 눌렀을 경우 아래로 이동

    if(game->GetFlag() == 0) // esc를 눌렀을경우 게임루프 종료
    break;

    pbullet = new CBullet();
    if(game->GetShotBullet() == 1) // space를 눌렀을경우 총알 발사
    {
    cur_key = true;
    // cur_key가 true이고 old_key가 false일때만 총알 발사
    // cur_key는 space가 눌린경우 true를 대입 받는다
    // space가 눌리지 않은 경우는 false값을 대입 받는다
    // old_key는 매 루프 마다 cur_key의 값을 대입 받는다
    // space가 계속 눌리고 있다면 cur_key와 old_key는 모두 true가 되어
    // 총알이 발사되지 않는다
    // space를 누르고 있지 않다가 누른경우
    // cur_key는 true가 되고 old_key는 false가 되어 총알이 발사 된다
    if( cur_key && !old_key )
    {
    pbullet->CreateBullet("A", player->GetX()+2, player->GetY());
    // 총알을 생성한다
    game->AddNode(&pbullet, &bullet_head, &bullet_tail);
    // 생성된 총알을 linked list에 추가한다
    }
    }
    else
    cur_key = false;
    old_key = cur_key;
    }
    //////////////////////////////////////////////////////////////////////////////////
    // 적기 생성

    if(count % 30 == 20) // 적기 모션 0,1
    for(i = 0; i<game->GetEnemyNum(); i++)
    {
    if(enemy[i] == NULL) // 적 배열이 초기화 되어있을 경우 
    {
    enemy[i] = new Enemy(-(i*10), i *2, 0); 
    break; // 0번 모션으로 움직이는 적 생성
    }
    if(enemy[game->GetEnemyNum() + i] == NULL)
    {
    enemy[game->GetEnemyNum() + i] = new Enemy(80 + (10 * i), 1 + i * 2, 1);
    break; // 1번 모션으로 움직이는 적 생성
    }
    }
    if(count % 30 == 10) //적기 모션 2,3
    for(i = 0; i<game->GetEnemyNum(); i++)
    {
    if(enemy[game->GetEnemyNum() * 2 + i] == NULL)
    {
    enemy[(game->GetEnemyNum() * 2) + i] = new Enemy(30,0, 2);
    break; // 2번 모션으로 움직이는 적 생성
    }
    if(enemy[game->GetEnemyNum() * 3 + i] == NULL)
    {
    enemy[(game->GetEnemyNum() * 3) + i] = new Enemy(50, 0, 3);
    break; // 3번 모션으로 움직이는 적 생성
    }
    }
    if(count % 30 == 0) //적기 모션 4,5
    for(i = 0; i<game->GetEnemyNum(); i++)
    {
    if(enemy[game->GetEnemyNum() * 4 + i] == NULL)
    {
    enemy[(game->GetEnemyNum() * 4) + i] = new Enemy(75, (i * 2) + 1, 4);
    break; // 4번 모션으로 움직이는 적 생성
    }
    if(enemy[game->GetEnemyNum() *5 + i] == NULL)
    {
    enemy[(game->GetEnemyNum() * 5) + i] = new Enemy(0, (i * 2), 5);
    break; // 5번 모션으로 움직이는 적 생성
    }
    }
    if(count % 50 == 10) //적기 모션 6
    for(i = 0; i<game->GetEnemyNum(); i++)
    {
    if(enemy[game->GetEnemyNum() *6 + i] == NULL)
    {
    enemy[(game->GetEnemyNum() * 6) + i] = new Enemy(20 + 20*i, 0, 6);
    break; // 6번 모션으로 움직이는 적 생성
    }
    }
    if (count % 50 == 10) //적기 모션 7
    for (i = 0; i<game->GetEnemyNum(); i++)
    {
    if (enemy[game->GetEnemyNum() * 7+ i] == NULL)
    {
    enemy[(game->GetEnemyNum() * 7) + i] = new Enemy(25+ 25* i, 0, 7);
    break; // 7번 모션으로 움직이는 적 생성
    }
    }
    //////////////////////////////////////////////////////////////////////////////////
    // 적 총알 생성

    int shootCount = 0; // 루프 10번당 발사될 적 총알 수
    static int shoot = 0; // 발사될 총알 번호 저장
    int rnd; // 렌덤값 저장
    switch(selectMenu)
    {
    case 1 :
    shootCount = 1;
    break;
    case 2 :
    shootCount = 3;
    break;
    case 3 :
    shootCount = 5;
    break;
    }
    while( shootCount && (count % 10 == 4))
    {
    rnd = rand() % ENEMYNUM; // 0보다 크고 적 숫자보다 작은 임의의정수
    if(enemy[rnd] != NULL && ebullet[shoot] == NULL)
    { // 임의의 정수의 적이 있고 shoot카운터에 해당하는
    // 적 총알이 생성되지 않았을경우
    ebullet[shoot] = new CBullet(); // 총알 할당
    ebullet[shoot]->CreateBullet("v", enemy[rnd]->GetX()+2, enemy[rnd]->GetY());
    //선택된 적의위치에 총알 생성
    shoot++;
    shootCount--;
    }
    if(shoot == ENEMYNUM) // 총알 카운터가 적수를 넘어갈때
    shoot = 0; // 0 대입 
    }
    //////////////////////////////////////////////////////////////////////////////////
    // 화면 출력
    for(i = 0; i < ENEMYNUM; i++)
    {
    if(enemy[i] != NULL)
    {
    enemy[i]->Move();
    if(enemy[i]->GetY() >= 0 && enemy[i]->GetY()+1 <= SCREENY+1 && enemy[i]->GetX() >= 0 && enemy[i]->GetX()+5 <= SCREENX)
    game->ScreenPrint(hStdOut, PINK,enemy[i]->GetX(), enemy[i]->GetY(), enemy[i]->GetType());
    else
    {
    delete enemy[i];
    enemy[i] =NULL;
    }
    }
    if(ebullet[i] != NULL)
    {
    ebullet[i]->MoveBullet(0,1);
    if(ebullet[i]->GetY() >= 0 && ebullet[i]->GetY()+1 <= SCREENY+1 && ebullet[i]->GetX() >= 0 && ebullet[i]->GetX()+5 <= SCREENX)
    game->ScreenPrint(hStdOut, WHITE,ebullet[i]->GetX(), ebullet[i]->GetY(), ebullet[i]->GetType());
    else
    {
    delete ebullet[i];
    ebullet[i] =NULL;
    }
    }
    }
    pbullet = bullet_head;
    while(pbullet)
    {
    game->ScreenPrint(hStdOut, WHITE,pbullet->GetX(), pbullet->GetY(), pbullet->GetType());
    pbullet->MoveBullet(0, -1);
    // 플레이어 총알, 적
    for(i = 0; i < ENEMYNUM; i++)
    {
    if(enemy[i] != NULL && game->Crash(pbullet,enemy[i]))
    {
    player->AddScore(100);
    pDelBullet = pbullet;
    check = 0;
    delete enemy[i];
    enemy[i] = NULL;
    break;
    }
    }
    if(pbullet->CheckRange() == 0)
    {
    pDelBullet = pbullet;
    check = 0;
    }
    pbullet = pbullet->pNext;
    if(check == 0)
    {
    game->DelNode(&pDelBullet, &bullet_head, &bullet_tail);
    check = 1;
    }
    }
    if(player->GetExist())
    game->ScreenPrint(hStdOut, RED,player->GetX(), player->GetY(), game->Explosion());
    else
    game->ScreenPrint(hStdOut, SKYBLUE,player->GetX(), player->GetY(), player->GetType());
    game->ScreenPrint(hStdOut, GREEN,0,0," 점수 : ");
    game->ScreenPrint(hStdOut, GREEN,9,0,player->GetScore());
    game->ScreenPrint(hStdOut, GREEN,12,0," Life : ");
    game->ScreenPrint(hStdOut, GREEN,21,0,player->GetLife());
    game->ScreenPrint(hStdOut, GREEN, 0, 1, " 경과시간 : ");
    endTime = clock();
    game->ScreenPrint(hStdOut, GREEN, 11, 1, ((double)(endTime - startTime)) / CLOCKS_PER_SEC);
    //////////////////////////////////////////////////////////////////////////////////
    // 충돌 처리

    for(i = 0; i < ENEMYNUM; i++)
    {
    // 플레이어, 적총알
    if( ebullet[i] != NULL && game->Crash(player, ebullet[i]) && player->GetExist() == 0)
    {
    player->SetExist(1);
    player->AddLife(-1);
    delete ebullet[i];
    ebullet[i] = NULL;
    break;
    }
    // 플레이어, 적 
    if(enemy[i] != NULL && game->Crash(player, enemy[i])&& player->GetExist() == 0)
    {
    player->SetExist(1);
    player->AddLife(-1);
    delete enemy[i];
    enemy[i] = NULL;
    break;
    }
    }

    delay(30); //시간 지연
    count++;
    game->ScreenClear(); // 화면 지우기
    if(game->GetExpCount() == 35)
    if(player->GetLife() <= 0)
    break;
    else
    {
    player->SetExist(0);
    player->SetPos(SCREENX/2, SCREENY);
    game->setExpCount(0);
    }
    }
    game->ScreenPrint(hStdOut, RED,SCREENX/2-5, SCREENY/2, "Game Over!");
    getch();
    game->ScreenClear();
    game->SetCursorType(NORMALCURSOR);

    for(i = 0; i < ENEMYNUM; i++)
    {
    // 플레이어, 적총알
    if( ebullet[i] != NULL)
    {
    delete ebullet[i];
    ebullet[i] = NULL;
    }
    }
    pbullet = bullet_head;
    while(pbullet)
    {
    // 플레이어 총알, 적
    pDelBullet = pbullet;
    pbullet = pbullet->pNext;
    game->DelNode(&pDelBullet, &bullet_head, &bullet_tail);
    }
    delete game;
    delete player;
    }


    메인 cpp소스인데 count가  프레임 카운트라는데  왜 만든건지 모르겠습니다 특히  적기 를 만들 때 if 조건문에 왜들어가는지 아무리 봐도 이해가 안가네요 ;;  그리고  모션 7은  왜  난이도 1에서는 나오는데 2~3에서는 안나올까요 ? ㅠㅠ

    이 게시물을 추천한 분들의 목록입니다.
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    17561
    정규분포 엑셀 질문좀요! 베스트금지본인삭제금지 노찌루찌루 16/06/10 00:39 411 0
    17560
    매트랩에서 comm.TurboDecoder 이 기능 써보신 분 계신가요? 인생뭐 16/06/09 23:30 410 0
    17559
    엄청 기초적인 c언어 질문합니다! [7] 바닐라황혼 16/06/09 21:32 557 0
    17558
    c# 로또 번호 생성기 소스인데..궁금증이있습니다 [2] 본인삭제금지 토왕 16/06/09 21:21 1758 0
    17557
    울트라 에디트 정규식 질문.... [3] 본인삭제금지 구라쌔리냐 16/06/09 20:09 626 0
    17556
    main.cpp에 함수들이 많아져간다면..? [7] 본인삭제금지 창천을꿈꾸며 16/06/09 19:42 370 1
    17555
    css 선택자 관련질문입니다 [4] 본인삭제금지 calculus6E 16/06/09 19:27 341 0
    17550
    32비트 버전 안맞는 드라이버를 64비트를 강제로 쓸수 있는 방법은없나요 [5] 입업벤치 16/06/09 16:52 755 0
    17549
    Db질문좀해도될까요? [12] 본인삭제금지 3o 16/06/09 15:33 411 0
    17548
    서버에 있는 데이터를 사용해보고 싶습니다. [1] 니콜캣우먼 16/06/09 15:30 332 0
    17547
    메모리 엑세스 오류.. 도움이 필요합니다. [15] 베스트금지베오베금지본인삭제금지외부펌금지 푸아 16/06/09 13:29 7477 0
    17546
    해외 서버 질문드려요 ㅜㅜ 많이 찾아봐도 없더라고요 해외 서버를 두고 [1] 철판냄비 16/06/09 11:48 282 0
    17545
    오토마타 이론서 추천 부탁 드립니다. [3] 빠른물 16/06/09 09:12 1467 0
    17543
    Mastering Programming(KENT BECK) [1] 잉어 16/06/09 02:53 718 1
    17542
    c언어 질문드립니다 [4] 본인삭제금지 시이나마시롱 16/06/09 02:29 426 0
    17541
    C 언어 질문.. [4] 본인삭제금지 적녹색약 16/06/09 01:40 400 0
    17540
    취업하고싶다. 블루♪레이븐 16/06/08 23:21 506 2
    17539
    c언어 비주얼 스튜디오 사용중 질문입니다 [2] 본인삭제금지 적녹색약 16/06/08 22:17 475 0
    17538
    C++ 지뢰찾기 문의드립니다. [5] 본인삭제금지 대★맛이야 16/06/08 19:16 1251 0
    17537
    유니티 쉐이더 질문있습니다. [7] 본인삭제금지 초보오유러 16/06/08 18:33 472 0
    c++갤러그 소스분석중인데.. [4] 본인삭제금지 토왕 16/06/08 16:45 3651 0
    17534
    vcruntime140.dll 때문에 죽고싶습니다 ㅜㅜ [9] 다꿈이되길바람 16/06/08 16:29 1381 0
    17533
    sql에서 테이블에 있는 값 리턴은 어떻게 하나요? [3] 베스트금지베오베금지본인삭제금지외부펌금지 lihirt 16/06/08 14:01 427 0
    17532
    python 코드 메모리가 초과해서 전부 못돌리는거 같은데 도움요청이요ㅠ [10] 베스트금지본인삭제금지외부펌금지 뭉뭉이아빠 16/06/08 11:12 9272 0
    17531
    [본삭금] c#에서도 static 사용을 자제해야하나요? [14] 본인삭제금지 사이몬S 16/06/08 09:23 775 0
    17530
    C++ 질문드립니다. [2] SherryBirkin 16/06/08 02:44 398 0
    17529
    DB 관련 업종은 무슨 언어를 다루나오? [3] 본인삭제금지 훗날닭집사장 16/06/08 02:10 540 0
    17528
    행님들... [2] 플라라 16/06/07 23:52 261 0
    17527
    질문) 안드로이드 루트 권한 최초 등록시에만 su실행 됩니다 ㅠㅠ [2] 본인삭제금지 빙티 16/06/07 22:28 689 0
    17526
    안드로이드 어레이어댑터 체크박스 전체선택 [6] 본인삭제금지 민중의분노 16/06/07 21:20 2099 0
    [◀이전10개] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈