디시인사이드 갤러리

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

갤러리 본문 영역

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

응잉앙앵(175.201) 2012.04.20 20:26:52
조회 56 추천 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 - -
311436 ㅎㅎ 난 생물학이 자주쓰는 ip를 알고있다 [3] elwlwlwk갤로그로 이동합니다. 12.04.21 75 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
311415 웹,네트워크 보안 잘하는 성님 있음 꿈의 알바 좀 해라. [5] 새벽4시네갤로그로 이동합니다. 12.04.21 105 0
311413 헛 프갤도 죽었네염1 [2] dd(180.227) 12.04.21 51 0
311412 다음학기 그래픽스 프로젝트 주제... [1] 땡칠도사갤로그로 이동합니다. 12.04.21 86 0
311410 책보다가 의문이 생겨서.. [5] 초잉여2(106.103) 12.04.21 76 0
311409 형들 학벌 구리면 대학원까지 가도 연구원 못해먹나여? [4] Aven갤로그로 이동합니다. 12.04.21 161 0
311408 야 근데 자기가 짜는 거에 대해 뭔가 알고 있어야지 구현이 되지 않냐?? [10] 에이시아(203.90) 12.04.21 112 1
311407 지렁이 게임 만들어라 너무 쉽나??? 에이시아(203.90) 12.04.21 55 0
311402 비트연산 좋아하는 교수 있는데 (211.117) 12.04.21 46 0
311401 오늘은 라인에 책을 들고왔다 [1] 초잉여2(106.103) 12.04.21 83 0
311400 오늘도 코딩 알바를 뛰었다.. [12] 아놔콘다갤로그로 이동합니다. 12.04.21 293 0
311399 JAVA코드인데 주석좀 다는거 도와주세요..ㅠㅠ 제발도와주세요!!!! 고 [13] 짬트라슈갤로그로 이동합니다. 12.04.21 122 0
311395 냥캣과 함께하는 프갤 [2] System32갤로그로 이동합니다. 12.04.21 75 0
311394 지금 회사인사람 ? [3] Html갤로그로 이동합니다. 12.04.21 51 0
311391 도서관인데 [1] 정의란 부엌인가갤로그로 이동합니다. 12.04.21 33 0
311390 이클립스 어케 다운받나요 ...... [4] LASTOR갤로그로 이동합니다. 12.04.21 62 0
311389 PC 직접 다루는거 이거 의미를 모르겟다? [2] ㅁㄴㅇㄹ(211.117) 12.04.21 46 0
311388 C#으로 아이폰 앱 개발 가능한가여? [5] ㅇㅇ(121.133) 12.04.21 167 0
311386 비존나온당 [1] 즐쿰갤로그로 이동합니다. 12.04.21 33 0
311385 토요일의 출근 알렉산더K갤로그로 이동합니다. 12.04.21 26 0
311384 0xfffff * 0xfff = ? [2] (175.212) 12.04.21 53 0
311382 10시에 시험보면 중간고사 시작이다. [1] 생물학(165.194) 12.04.21 34 0
311381 10시에 시험보면 중간고사끝이다 즐쿰갤로그로 이동합니다. 12.04.21 28 0
311380 님들 연산자 계산좀 !!!!!!!!!!!!!!!!!!!!!!!!! [25] d(112.72) 12.04.21 107 0
311379 자바에서 인스턴트랑 class의 차이? [3] File갤로그로 이동합니다. 12.04.21 79 0
311378 vb 6.0 왜쓰냐? [6] 초잉여2(106.103) 12.04.21 86 0
311377 심심한 형들 나 C좀 알려줘 ㅠㅠ [32] File갤로그로 이동합니다. 12.04.21 137 0
311376 도저히 안되겠다. 오늘은 일찍 자야겠다.... [1] darw002(106.103) 12.04.21 44 0
311375 시험공부해야하는데.... [1] 땡칠도사갤로그로 이동합니다. 12.04.21 44 0
311374 나 자바공부중인데 이거 도대체 머때문에 이런거야? [4] 안자는형(119.195) 12.04.21 53 0
311372 오픈 더 게이트 땡칠도사갤로그로 이동합니다. 12.04.21 51 0
311371 프로그래머 새끼들아 제발 도움 좀. [2] FuckYou(125.142) 12.04.21 89 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2