디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

C 오류점영 ㅠㅠ 전체소스 올릴겡

응잉앙앵(175.201) 2012.04.20 20:26:52
조회 55 추천 0 댓글 2

// SDL GAME.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//

#include "stdafx.h"

#include <SDL.h>
#include <sdl_gdiplus.h>
#include <string>
#include <time.h>
#include <math.h>

#pragma comment(lib,"SDL")
#pragma comment(lib,"SDLmain")
#pragma comment(lib,"SDL_gdiplus")

#define MapWidth 500
#define view_wview 640
#define view_hview 480

SDL_Surface *screen;
bool keyLeft=0,
         keyRight=0,
         keyUp=0,
         keyDown=0,
     keyLeftPress=0,
         keyRightPress=0,
         keyUpPress=0,
         keyDownPress=0;
        
short mapPos[MapWidth][MapWidth]={0};
bool canPass[7]={0};
int view_xview=0,view_yview=0;

int random(int x){return rand()%(x+1);}
int max(int x,int y){return x>y?x:y;}
int min(int x,int y){return x<y?x:y;}

SDL_Surface* LoadIMG(std::string name){
        SDL_Surface* Loadedimage=NULL;
        SDL_Surface* Optimizedimage=NULL;
        Loadedimage=IMG_Load(name.c_str());

        if(Loadedimage!=NULL){
                Optimizedimage=SDL_DisplayFormat(Loadedimage);
                SDL_FreeSurface(Loadedimage);
                printf(""%s" loading success\n",name.c_str());
        }else printf(""%s" loading fail\n",name.c_str());

        return Optimizedimage;
}

typedef struct Position{
        int x,y;
}Position;

typedef struct Sprite{
        SDL_Surface *res;
        int width,height,xoffset,yoffset;
}Sprite;

typedef struct Object{
        Sprite spr;
        Position pos,targetPos;
        int flag;
}Object;

void SpriteInit(Sprite &spr){
        spr.width=1;
        spr.height=1;
        spr.xoffset=0;
        spr.yoffset=0;
        printf("width: %d / height: %d\n",spr.res->w,spr.res->h);
}

void ObjectInit(Object &obj,std::string res,int x,int y){
        obj.spr.res=LoadIMG(res);
        SpriteInit(obj.spr);
        obj.pos.x=x;
        obj.pos.y=y;
}

void DrawSurface(SDL_Surface *dst,Sprite spr,int index,int x,int y){
        SDL_Rect rectDst,rectSrc;
        rectDst.x=x-spr.xoffset;
        rectDst.y=y-spr.yoffset;
        rectSrc.x = (index%spr.width) * spr.res->w/spr.width;
        rectSrc.y = (index/spr.width) * spr.res->h/spr.height;
        rectSrc.w = spr.res->w/spr.width;
        rectSrc.h = spr.res->h/spr.height;
        SDL_BlitSurface(spr.res,&rectSrc,dst,&rectDst);
}

void Render(){
        SDL_Flip(screen);
}

void DrawObject(SDL_Surface *dst,Object &obj){
        DrawSurface(dst,obj.spr,0,obj.pos.x*16-view_xview,obj.pos.y*16-view_yview);
}

int main(int argc,char **argv){
        SDL_Init(SDL_INIT_VIDEO);

        screen=SDL_SetVideoMode(640,480,32,SDL_SWSURFACE | SDL_DOUBLEBUF);

        //변수 선언
        bool quit=0;
        float fps=60;
        int startTick,i,j;

        SDL_Event event;

        //게임변수 선언
        int move_delay=0;
        short turn=0;

        //리소스 로드
        Sprite back;
        Sprite background;
        back.res=LoadIMG("res\\img\\back.png");
        SpriteInit(back);
        background.res=LoadIMG("res\\img\\background.png");
        SpriteInit(background);

        background.width=7;
        
        //게임관련 변수 초기화
        SDL_WM_SetCaption("SDL GAME TEST",NULL);
        srand((unsigned)time(NULL));
        for(i=0;i<MapWidth;i++)for(j=0;j<MapWidth;j++)
                mapPos[i][j]=random(6);

        //블록 통행여부
        canPass[0]=1;
        canPass[1]=1;
        canPass[2]=1;
        canPass[3]=1;
        canPass[4]=1;
        canPass[5]=1;
        canPass[6]=0;

        //인스턴스 생성        
        Object player;
        ObjectInit(player,"res\\img\\charactor.png",random(MapWidth),random(MapWidth));
        Object act[2000];
        for(i=0;i<2000;i++){
                ObjectInit(act[i],"res\\img\\charactor.png",random(MapWidth),random(MapWidth));
                act[i].flag=i<200?3:(1+random(1));
                act[i].targetPos.x=random(MapWidth);
                act[i].targetPos.y=random(MapWidth);
        }
        
        while(!quit){
                startTick=SDL_GetTicks();

                //프레임 초기화
                keyLeftPress=0;
                keyRightPress=0;
                keyUpPress=0;
                keyDownPress=0;

                if(SDL_PollEvent(&event)){
                        switch(event.type){
                        case SDL_QUIT:
                                quit=1;
                                break;
                        case SDL_KEYDOWN:
                                switch(event.key.keysym.sym){
                                case SDLK_LEFT:
                                        keyLeft=1;
                                        keyLeftPress=1;
                                        break;
                                case SDLK_RIGHT:
                                        keyRight=1;
                                        keyRightPress=1;
                                        break;
                                case SDLK_UP:
                                        keyUp=1;
                                        keyUpPress=1;
                                        break;
                                case SDLK_DOWN:
                                        keyDown=1;
                                        keyDownPress=1;
                                        break;
                                case SDLK_SPACE:
                                        for(j=-5;j<=5;j++){
                                                        for(i=-5;i<=5;i++){
                                                                if(i||j)printf("%d ",mapPos[player.pos.x+i][player.pos.y+j]);
                                                                else printf("  ");
                                                        }
                                                        printf("\n");
                                                }
                                        break;
                                }
                                break;
                        case SDL_KEYUP:
                                switch(event.key.keysym.sym){
                                case SDLK_LEFT:
                                        keyLeft=0;
                                        break;
                                case SDLK_RIGHT:
                                        keyRight=0;
                                        break;
                                case SDLK_UP:
                                        keyUp=0;
                                        break;
                                case SDLK_DOWN:
                                        keyDown=0;
                                        break;
                                }
                                break;
                        }
                }
                
                //캐릭터 이동
                if((keyRight||keyLeft||keyDown||keyUp)&&move_delay<=0){

                        move_delay=10;
                        if(keyRight&&canPass[mapPos[player.pos.x+1][player.pos.y]]){
                                player.pos.x+=1;
                                if(!keyLeft)turn++;
                        }
                        if(keyLeft&&canPass[mapPos[player.pos.x-1][player.pos.y]]){
                                player.pos.x-=1;
                                if(!keyRight)turn++;
                        }
                        if(keyDown&&canPass[mapPos[player.pos.x][player.pos.y+1]]){
                                player.pos.y+=1;
                                if(!keyUp)turn++;
                        }
                        if(keyUp&&canPass[mapPos[player.pos.x][player.pos.y-1]]){
                                player.pos.y-=1;
                                if(!keyDown)turn++;
                        }

                        player.pos.x=max(0,min(MapWidth-1,player.pos.x));
                        player.pos.y=max(0,min(MapWidth-1,player.pos.y));

                }else{move_delay-=1;}

                view_xview=player.pos.x*16-320;
                view_yview=player.pos.y*16-240;

                while(turn){
                        turn--;

                        for(i=0;i<2000;i++){
                                if(act[i].pos.x==act[i].targetPos.x&&act[i].pos.y==act[i].targetPos.y){
                                        act[i].targetPos.x=random(MapWidth);
                                        act[i].targetPos.y=random(MapWidth);
                                }

                                if((random(1)||act[i].pos.y==act[i].targetPos.y)&&act[i].pos.x!=act[i].targetPos.x){
                                        if(canPass[mapPos[act[i].pos.x+(act[i].pos.x<act[i].targetPos.x)-(act[i].pos.x>act[i].targetPos.x),act[i].pos.y]]){//여기서 오류
                                                act[i].pos.x+=(act[i].pos.x<act[i].targetPos.x)-(act[i].pos.x>act[i].targetPos.x);
                                        }
                                }else{
                                        if(canPass[mapPos[act[i].pos.x,act[i].pos.y+(act[i].pos.y<act[i].targetPos.y)-(act[i].pos.y>act[i].targetPos.y)]]){//여기서 오류
                                                act[i].pos.y+=(act[i].pos.y<act[i].targetPos.y)-(act[i].pos.y>act[i].targetPos.y);
                                        }
                                }
                        }
                }


                //Rendering
                DrawSurface(screen,back,0,0,0);
                for(j=max(0,-view_yview/16-1);j<min(30,-view_yview/16+MapWidth-1);j++)for(i=max(0,-view_xview/16-1);i<min(40,-view_xview/16+MapWidth-1);i++){
                        DrawSurface(screen,background,mapPos[view_xview/16+i][view_yview/16+j],i*16,j*16);
                }
                DrawObject(screen,player);
                for(i=0;i<2000;i++){
                        DrawObject(screen,act[i]);
                }
                Render();

                SDL_Delay((int)(1000/fps));
        }

        SDL_Quit();

        return 0;
}









실험해보니깐 mapPos 내부에 쓰레기값이 들어간거 같아... 전부 4502016 뭐 이런값들 줄줄 들어가있던데 무슨일이지.. 초기화도 다 시켰고,, ㅠ
SDL써서 만든거 ㅠ

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 뛰어난 운동 신경으로 남자와 싸워도 이길 것 같은 여자 스타는? 운영자 25/11/24 - -
AD 따뜻한 겨울나기! 방한용품 SALE 운영자 25/11/27 - -
311528 유니티3d 잘 아는형 없음? [2] 비밀의계곡갤로그로 이동합니다. 12.04.22 93 0
311527 방금 대충 구글링해봤는데.. [1] btnface(211.221) 12.04.22 87 0
311522 똥싸고 돌아왔더니 혼돈에 카오스 SODMaster갤로그로 이동합니다. 12.04.22 33 0
311521 뭔일있나. . [1] 쿄스케갤로그로 이동합니다. 12.04.22 58 0
311518 형들 게임프로그래밍 할때 말야 [5] 플밍초보(210.92) 12.04.22 115 0
311516 큰일났다.... [5] 초잉여(106.103) 12.04.22 87 0
311514 할거 없으면 누가 정리좀 해봐라 정리(121.139) 12.04.22 39 0
311502 아 근데 정신차리고 보니 벌써 1시네 ㅡㅡ? [2] SODMaster갤로그로 이동합니다. 12.04.22 38 0
311498 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 일이 재밌어지넼 ㅉㅉ(183.99) 12.04.22 45 0
311495 프갤횽들 mfc 다이얼로그 관련 간단한거 하나 물어봐도 될까? [4] 캐촙오(110.10) 12.04.22 57 0
311489 뭐야 갤이 조잡하게 돌아가고 있어... [1] SODMaster갤로그로 이동합니다. 12.04.22 63 0
311486 c언어 본색 동영상 전체 볼 수 있는곳 없나요? ㄹㅇㄹㅇ(110.15) 12.04.22 27 0
311480 답변좀 제발 부탁드립니다..ㅠ 제발..ㅜㅜ [2] 배리(175.208) 12.04.22 77 0
311478 형들 이게 도대체 무슨경우에요? enum 왜이래요?? Witch Doctor갤로그로 이동합니다. 12.04.21 35 0
311476 생성행렬 구할줄 아는횽 있음? 금고래(61.43) 12.04.21 77 0
311474 푸로그램 카운터를 직접 제어 할 수 있다면 [1] ㅇㅇ(211.117) 12.04.21 41 0
311471 일급 19만원 드림알바 할 게이 마지막으로 한번만 더 모집해봄니다 [4] 새벽4시네갤로그로 이동합니다. 12.04.21 82 0
311469 java에 Byte형은 뭐할때 쓰나요 ^-^ ? [3] 111(121.130) 12.04.21 70 0
311467 SQL 링크 에러때문에 밤새 고생하다가 [2] elwlwlwk갤로그로 이동합니다. 12.04.21 40 0
311465 형들 기초적인 우선순위에 대해 질문좀,.. [7] c언어 초보(218.235) 12.04.21 66 0
311462 프로그래머가 되고싶은데요...게임프로그래머도 학벌보나요??ㅠ 배리(175.208) 12.04.21 111 0
311461 ㅠㅠ이거슨 무슨일 ㅠㅠ [1] 알려주세요ㅠ(58.151) 12.04.21 52 0
311460 송원대가 누구임? 생물학(175.120) 12.04.21 44 0
311451 오늘은 조용하니 덕짤이나 한번더 싸야겠다. System32갤로그로 이동합니다. 12.04.21 68 0
311448 근데 전공서적 번역 보통 누가해요? [14] 길가던놈갤로그로 이동합니다. 12.04.21 188 0
311447 오라클 구글이 자바 베꼇다는 것을 증명 [5] [성대아싸]갤로그로 이동합니다. 12.04.21 181 0
311443 프갤러들을 위해 바보플머가 엄청난 생각(?)을 공개한다. [5] 바보플머(218.155) 12.04.21 97 0
311442 비올땐 덕짤 [2] System32갤로그로 이동합니다. 12.04.21 86 0
311440 야 게임회사는 4d라는 말이있던데 [2] 초잉여2(106.103) 12.04.21 111 0
311438 아저씨 안될라면... [1] 아놔콘다갤로그로 이동합니다. 12.04.21 39 0
311437 소프트웨어엔지니어 뭐하는직업임? [2] 캐릭갤로그로 이동합니다. 12.04.21 85 0
311436 ㅎㅎ 난 생물학이 자주쓰는 ip를 알고있다 [3] elwlwlwk갤로그로 이동합니다. 12.04.21 74 0
311435 플밍 과외 돈 얼마 정도 하냐? [1] 생물학(211.234) 12.04.21 78 0
311434 안녕하세요 현재 취업을 목표로삼는 직딩입니다 [7] 안녕하세요(110.47) 12.04.21 122 0
311433 쉬프트는 곱셈 나눗셈에라도 쓰지만 비트 부정은 어디다 쓰냐 [3] ㅇㅇ(211.117) 12.04.21 44 0
311432 프로그래밍 공부는 직접소스 짜보는게 답인듯 [2] 세탁범갤로그로 이동합니다. 12.04.21 71 0
311431 형들 이거 문제자체가 이해가 안가는데 뭔지좀 알려주면안되? [8] ㅁㄴㅇ(115.143) 12.04.21 99 0
311430 비쥬얼 2010 프로그래밍 문제해결 질문좀 형들 ㅠㅠ [3] 고담베어갤로그로 이동합니다. 12.04.21 41 0
311429 형들아 이거 제대로 돌아가게 수정좀 [1] ㅇㅇ(211.117) 12.04.21 35 0
311428 자바 간단한 질문좀할게요 답변부탁요 [5] 유성환(121.217) 12.04.21 75 0
311427 한빛미디어 asp 연습문제 해답 있으신분 없나요..? [4] 쿨릉(180.64) 12.04.21 58 0
311426 프갤러들을 위한 재미있는 문제. (아는 사람은 말하지 말긔) [8] 바보플머(218.155) 12.04.21 135 0
311425 time() 함수 만들어 사용하려면 ? [5] 디지털공학갤로그로 이동합니다. 12.04.21 62 0
311424 형들좀 도와줘 [9] fsdfsdf(222.105) 12.04.21 65 0
311422 헝거게임이나 디아블로 책 사서 읽은사람 있냐? [4] darw002(106.103) 12.04.21 56 0
311420 visual studio 2010 질문요~ File갤로그로 이동합니다. 12.04.21 33 0
311419 아 시발 꿈의 알바 할 게이 없냐 진짜 ?? [11] 새벽4시네갤로그로 이동합니다. 12.04.21 147 0
311418 메가 업로드 왜 ㅂㅅ 됐음? [9] 아놔콘다갤로그로 이동합니다. 12.04.21 106 0
311417 이클립스 CDT돌리는데 바이너리 못찾는다고 오류 계속 남미다 새벽4시네갤로그로 이동합니다. 12.04.21 37 0
311416 JAVA 텍스트파일 읽어와서 정렬하여 출력 [10] 엉덩이에땀갤로그로 이동합니다. 12.04.21 93 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2