상세 컨텐츠

본문 제목

게임프로그래밍에 앞써 코딩연습하기

프로그래밍/컴퓨터관련

by jin* 2012. 3. 19. 21:10

본문





바로 게임을 만들기 전에 문자열의 이용, 함수의 활용, 구조체, 배열, 포인터등 연습을 하였다.

아래 소스가 연습의 결과물!

구조체로 ID와 Score를 만든후, 10개의 배열포인터형식으로 만든다.

Score를 중심으로 각 구조체를 qsort함수를 이용하여 퀵정렬을 하고 화면에 출력한다.

프로그램은 Visual Studio 2010 Professinal, Win32 모드에서 코딩 작업.

#include "stdafx.h"
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define MAX_NUM 10  // 만들 구조체의 갯수를 미리 상수로 지정


// id, score를 Profile구조체로 선언
typedef struct{
    int id;
	int score;
}Profile;

// 현재 Data를 출력해주는 print함수
void print(const Profile *pro, int n, int s);

// score 정수의 값 크기를 비교해주는 compare함수
int compare (const void * a, const void * b);

// main 함수
int _tmain(int argc, _TCHAR* argv[])
{
	
	Profile *prof;
	
	srand((unsigned)time(NULL));	
    
    // Profile구조체 x MAX_NUM(10)만큼의 공간할당 후 prof에 연결
	prof = (Profile *)malloc(sizeof(Profile)*MAX_NUM);

    // 각 Data를 순차적으로 입력
	for (int i = 0 ; i<MAX_NUM ; i++){
		prof[i].id = i;
		prof[i].score = rand()%100;
	}

	printf("***** Before *****\n");
	print(prof,MAX_NUM, 0);

    // stdlib.h 에 있는 qsort를 이용하여 데이터 정렬
	qsort(prof,MAX_NUM,sizeof(Profile),compare);

	printf("\n");
	printf("***** After *****\n");
	print(prof,MAX_NUM, 1);

    // 할당된 메모리 해제
	free(prof);
	
    return 0;
}

int compare (const void * p, const void * q)
{
    
    // 아무타입없는 포인터 p, q를 Profile구조체 형식으로 형변환
    const Profile* ip = (const Profile*) p;
    const Profile* iq = (const Profile*) q;
    
    // 구조체 안에 있는 score로 값 비교후 리턴
    return ip->score - iq->score; 
    /*
     ip - iq
     ip가 더 큰 정수의 경우 : + 값 반환
     iq가 더 큰 정수의 경우 : - 값 반환
     ip와 iq가 같을 경우 : 0 반환
     */
}

static void print(const Profile* pro, int n, int s) { 
	
    for(int i=0; i<n; i++){
		if(s == 0)
            printf("id : %d Score : %d \n", pro[i].id, pro[i].score);
		else
            printf("Rank : %d \t  id : %d Score : %d \n",i+1, pro[i].id, pro[i].score);
	}

}





이것으로 첫번째 시간 끝!
 


관련글 더보기

댓글 영역