자 C언어에서는 배우지 않았던 것을 배워 볼까 합니다.

C언어에서 배운 것은 int와 void(생략가능)이 전부 였습니다.

하지만 C#에서는 byte, sbyte, short, ushort, int, uint, long, ulong, char이렇게 다양한 선언이 존재합니다.

그러면 간단하게 각각이 무엇을 뜻하게 되는 것인지를 알아보는 것으로 합시다.

일단 char을 빼고는 전부 숫자를 저장하는 변수 선언 입니다.

그러면 왜?? 이렇게 많은 것을 필요로 하는지???에 관하여 설명을 하도록 하겠습니다.

프로그래밍을 할때 메모리를 신경쓰고 작성을 하고 그럽니다.

변수를 선언을 하면 공간을 만들게 되는데 이것을 통하여 사용할 메모리 용량을 배정받고는 합니다.

그래서 일단 이렇게 다양하게 존재하는 것 입니다.

byte 는 0~255까지의 값을 저장할 수 있게 합니다.

sbyte는 -128~127까지의 값을 지정할 수 있게 합니다.

short는 -32,768~32,767까지의 값을 지정이 가능합니다.

ushort는 0~65,535사이의 값을 지정합니다.

int는 가장 흔한 선언인데 -2,147,483,648~2,147,483,648사이의 값을 저장합니다.

uint는 int의 범위랑 비슷합니다. 물론 0에서 시작을 하지만요.

그래서 범위는 0~4,294,967,296인데 이제 슬슬 짐작이 가시리라고 생각을 합니다.

long는 -922,337,203,685,477,508~922,337,203,685,477,508의 사이에 존재하는 값을 저장할 변수를 선언하는 것 입니다.

ulong은 922,337,203,685,477,508이거의 두배가 되는 것이겠죠??

0~1,844,674,407,370,955,016의 사이의 값입니다.

마지막으로 아까 말을 하였던 char입니다.

유니코드를 저장하는데 유니코드라는 것은 한글이나 그런 문자같은 것을 저장하는 것을 말합니다. 문양같은 것도 해당이 되겠지요.

자 이제 하나씩 사용을 해봅시다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
namespace static_ex {
  class MainAp {
    static void Main(string[] args) {
      sbyte a = -30;
      byte b = 85;
      Console.WriteLine("a={0}, b={1}", a, b);
      short c = -23451;
      ushort d = 32452;
      Console.WriteLine("c={0}, d={1}", c, d);
      int e = -35626943;
      uint f = 234513593;
      Console.WriteLine("e={0}, f={1}", e, f);
      long g = -342649240561;
      ulong h = 3294058249501859403;
      Console.WriteLine("g={0}, h={1}", g, h);
    }
  }
}
cs

자 이런식으로 선언이 전부 가능합니다.

선언을 하게 되면 출력은 전부 이렇게 나옵니다.

그래서 여기서 궁금한 것이 생깁니다. byte에 256의 값을 저장한다면?? 어떤일이 벌어질까요??

오류코드가 뜹니다. 할 수 없다고요.... 네 못합니다.

그러면 저는 이만 가보도록 하겠습니다.

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,
드디어 배열이라는 곳까지 왔습니다.

배열이라는 것은 여러분에게 조금 더 간편한 코딩을 도와주게 될 코드인데요

이유는 고등수학에 수열이라는 것을 떠올리시면 편하실 것이라고 생각을 합니다.

수열이라는 것은 수의 나열이라는 것을 기억하시거나 알아두시기를 바랍니다.

아무튼 배열은 변수를 조금 더 간편하게 사용 가능하게 해 줍니다.

일단 예제를 보시고 판단을 하시기를 바랍니다.

1
2
3
4
5
6
7
8
9
#include<stdio.h>
int main() {
  int ga, na, da, ra, ma, ba, sa, a;
  printf("8명의 나이를 조사하여 작성하세요\n");
  scanf_s("%d, %d, %d, %d, %d, %d, %d, %d"&ga, &na, &da, &ra, &ma, &ba, &sa, &a);
  printf("8명의 나이는 다음과 같습니다.\n");
  printf("%d, %d, %d, %d, %d, %d, %d, %d\n", ga, na, da, ra, ma, ba, sa, a);
  return 0;
}
cs

이렇게 길고 귀찮은 코드를 단번에 줄일 수가 있습니다.

1
2
3
4
5
6
7
8
9
#include<stdio.h>
int main() {
  int a[8];
  printf("8명의 나이를 조사하여 작성하세요\n");
  scanf_s("%d, %d, %d, %d, %d, %d, %d, %d"&a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &a[8]);
  printf("8명의 나이는 다음과 같습니다.\n");
  printf("%d, %d, %d, %d, %d, %d, %d, %d\n", a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);
  return 0;
}
cs

뭐 달라지는 것은 보이지 않을 지도 모릅니다.

네 저도 그렇게 생각을 합니다만 엄청나게 많은 양의 코드를 작성을 하다보면 일일이 변수를 선언하기도 귀찮기도 합니다.

그럴때 변수를 한번에 선언을 하는 것도 나쁘지는 않습니다.

그러니깐 int a[8];이라는 선언은 a라는 변수 8칸짜리를 선언하는 것과 다를 것이 없습다.

그냥 귀찮기도 하고 그러니 으음.... 네 아무튼 그렇게 합시다.

일일이 선언하기도 귀찮고 네..... 그냥 사용합니다.

자 이렇게 되었을때 다시 코드를 조금더 줄여보는 것으로 합시다.

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main() {
  int a[8];
  printf("8명의 나이를 조사하여 작성하세요\n");
  for(i = 0 ; i < 8 ; i++ ) {
    scanf("%d"&a[i]);
  }
  for (t = 0 ; t < 8 ; t++ ) {
    printf("%d\n"&a[t]);
  return 0;
  }
cs

이렇게 줄일 수가 있습니다.

그런데 여러 변수를 한번에 선언하는 배열 선언 (이하 배열 선언)에게 각각의 값을 따로 저장이 가능합니다.

int a[4] ={ 43, 48, 99, 234 };

이런 식으로 직접적으로 미리 설정하는 것도 가능합니다.

만약 이러한 경우 int a[4] = {34, 55};

출력값이 이러하게 나옵니다.

a[1]은 34

a[2]은 55

a[3]은 0

a[4]은 0

이런 식으로 나옵니다.

배열이라는 것은 앞으로 코딩을 하는 과정에서 편하게 사용이 되지 않을까하고 조심스럽게 생각을 하는 바입니다.

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

Static's CIVIL WAR remastered by KILO.egg


2018/03/17

1.C언어로 작성된 불 필요한 코드 다소 수정

2.라디오 엔딩을 위한 건전지 제작 추가


아아......

제가 저의 컴퓨터에서는 파일을 숨겨서 코드를 못 보게 할 수 있었는데 다른 방법을 찾을 때 까지 아마..... 크흡!! 오픈소스를 해야할 것 같습니다.

아니 그냥 앞으로 혼자서 개발하는 cmd에서 작동하는 게임들은 전부 오픈 소스를 하도록 하겠습니다.

올해 로드맵을 공개하도록 하겠습니다.

03~05/2018

-괴한의 등장 횟수 제한으로인한 난이도 조정 예정

-난이도별로 다른 프로그램을 제작하여 제공할 예정

-라디오 엔딩 루트를 시작할 수 있게 함


06~08/2018

-라디오 엔딩 루트를 전부 종료함

-약물개발 이벤트를 생성함


09~11/2018

-음식개발 이벤트를 생성함

-간단한 버그 테스트 후 버그를 수정한다.


이번년도를 기점으로 이 civil war도 업데이트를 종료하고 이어서 ссср를 제작하려고 합니다.

ссср는 소련(냉전시대에 전쟁이 발발하고 그 뒤의 세계에서 정상적으로 살아갈 수 있을까?)라는 의문점에서 시작을 하여 상상을 하고 그런 세계관에서 처음보는 동물들을 사냥하고 온갓 이벤트를 발생시키면서 오래 생존하는 것을 목표로 하는 그런 게임을 만들어 보고 싶습니다.

ссср를 기대를 해주시면 감사할 것 같습니다.

흐음.... 신작 사진으로 쓰려고 했지만..... 으음 그냥 뭐 어떻게 하겠어요?? 써야죠 만들었으닠ㅋㅋㅋㅋ 더 좋은 사진 일러스트 레이터에게 그려달라고 해야하나....? 아무튼 저는 이만 가보도록 하겠습니다.

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

안녕하세요!!

오늘은 랜덤 함수라는 것을 들고 와 보겠습니다.

랜덤 함수란?

제가 함수를 정의하는 것을 알려드린 것으로 기억하고 있습니다.

그래서 제가 이번에는 그 정의하는 것을 재미있게 매번 컴퓨터가 정해주는 값이 출력이 되게 만들어 보겠습니다.

일단 준비물은 늘 그렇듯 비쥬얼 스튜디오(이하 vs)입니다.

일단 저는 이번 시간을 통한 추첨기를 만들어 보도록 하겠습니다.

(올해 학교 축제에 사용을 하기 위해서 말이죠)

일단 먼저 가장 기본적인 랜덤하게 나오는 값을 불러오는 소스코드를 가져오겠습니다.

1
2
3
4
5
6
7
8
9
#include<stdio.h>
#include<stdlib.h>
 
int main() {
  int Num;
  Num = rand();
  printf("랜덤 값입니다 => %d", Num);
  return 0;
}
cs

새로운 헤더파일을 생성하였습니다.

헤더파일에는 이것 외에도 여러가지 헤더파일이 존재합니다.

예를 들어서 

1
2
3
4
5
6
7
8
9
10
#include <windows.h>
#include <stdio.h>
 
int main () {
  printf("으음....\n");
  Sleep(1000);
  printf("으으으음...\n");
  return 0;
}
 
cs

라던가 말이죠

이것은 나중에 따로 파서 알려드릴 건데 미리 귀띔을 해놓자면

대기라는 것입니다.

개에게 "기다려!"하는 것과 같은 대기명령입니다.

나중에 추가적인 설명을 하도록 하겠습니다.

그리고 새로 추가가 된 헤더인 stdlib.h는

랜덤함수인 rand가 들어있는 헤더입니다.

그러면 이제 다시 사용 방법에 대하여 설명을 하도록 하겠습니다. 

늘 그렇듯 int Num;으로 Num이라는 변수를 선언합니다.

그리고 그 Num이라는 변수에 rand()라는 랜덤함수를 저장합니다.

마지막으로 printf로 그 값을 출력하여 랜덤값인지 아닌지를 확인 합니다.

그리고 return으로 0번째 줄로 돌려 보냅니다.

이렇게 설명을 하였지만 무엇인가 부족한 느낌을 받을 수 밖에 없을 것입니다.

저기요....? 왜 같은 값만 주구장창 나오는 것인가요??? 라고 말이죠.

그러면 여기에 시간(s)당 이라는 변화를 주어 봅시다.

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
 
int main() {
  int Num;
  srand(time(NULL));
  Num = rand();
  printf("랜덤 값입니다 => %d", Num);
  return 0;
}

두개의 코드가 추가가 되었습니다.

하나는 헤더 time.h가 추가가 되었고, 하나는 srand(time(NULL));이 추가가 되었습니다.

이 두개가 하는 시간(s)당이라는 변화를 줍니다.

자세히 보면 srand(time(NULL)); 에서

srand는 함수의 원형이되고

time은 시간을 담당하게 되는 것이고

NULL과 time이 같이 만나게 되어서 1초마다 리턴을 하게 됩니다.

이 강좌를 보면서 계속 익숙해지시는 방법이외에는 전혀 없다고 봅니다.

그리고 이것을 실제로 실행을 시킨다면 의문이 하나 생길 것입니다.

범위를 지정해 줄수는 없는 것인가?? 하면서 말이죠.

가능합니다.

실제로는 32767이라는 너무나도 큰 수까지 존재를 하는데.... 솔직히 100이면 충분하다고 느껴지는 것은 저만 그렇습니까?? 그래서 저는 100까지 하도록 하겠습니다.

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
 
int main() {
  int Num;
  srand(time(NULL));
  Num = rand() % (100+ 1;
  printf("랜덤 값입니다 => %d", Num);
  return 0;
}
cs

새로운 친구를 등장 시켰습니다.

% (100) + 1 이라는 녀석을 추가하였는데

%(최댓값) + 최솟값 이런식으로 사용을 하는 것입니다.


이번 시간에는 랜덤함수라는 것을 배워보았습니다.

랜덤함수는 사용하는 방도가 아주 많아서 앞으로 자주 보지 않을까 하고 생각을 합니다.

그러면 다음 강좌에서 보는 것으로 하고 저는 여기서 이만 마치도록 하겠습니다.

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

제가 간단하게 제작을 한 civil war를 오픈소스를 하여 코드를 공개하도록 하겠습니다.

리마스터작업을 진행중에 있으며 상당수의 코드가 깔끔하게 개편이 될 예정입니다.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(viod) {
 int user, start, com, item, man, heal = 0;
 int not_safe_water = 0, wheat = 0, iron = 0, lead = 0;
 int water = 0, bread = 0, knife = 0, hand_gun = 0, Ar = 0, Sr = 0, Sg = 0;
 int Ct = 100, score = 0, thirst = 3;
sTarT:
 printf("제작 : STATIC GAMES\n시작하시려면 1 :");
 scanf_s("%d", &user);
 if (user == 1) {
  goto Mt; //메인으로 옮깁니다.
 }
 else {
  printf("잘못된 입력입니다.\n");
  goto sTarT; //시작문구로 옮깁니다.
 }
Mt:
 printf("타이틀 : civil war\n");
 printf("시작은 2번 \n");
 printf("처음 안내문구는 아무번호 \n");
 scanf_s("%d", &start);
 if (start == 2) {
  goto In_Game; //게임을 시작합니다.
 }
 else {
  goto sTarT; //다시 처음으로 돌아갑니다.
 }
In_Game:
 printf("안녕하세요?? 저는 당신을 이제부터 안내할 겁니다.\n");
 printf("제작은 간단하게\n");
 printf("캐릭터의 상태를 보고 계산을 합니다.\n");
 printf("그리고 턴을 마감할 수도 있습니다.\n");
 printf("매 턴마다 순서대로 진행해 주세요.\n시작을 하실때는 0번입니다.\n"); //안내를 하는 것
 scanf_s("%d", &com);  //입력을 요구합니다.
 if (com == 0) {
  goto main; //게임을 본격적으로 시작합니다.
 }
 else {
  printf("오류\n");
  goto In_Game;
 }
main:
 if (score >=0) {
  score++;
  printf("%d일째 생존\n", score);
  thirst--;
  not_safe_water++;
  wheat++;
  iron++;
  lead++; //더러운 물, 밀, 철, 납을 하나씩 매일 생산합니다.
  printf("당신이 보유중인 더러운 물 %d개,밀 %d개,철 %d개,납 %d개\n물 %d개,빵 %d개,칼 %d개,권총 %d개,돌격소총 %d개,저격소총 %d개,샷건 %d개\n그리고 캐릭터의 남은 채력 %d\n", not_safe_water, wheat, iron, lead, water, bread, knife, hand_gun, Ar, Sr, Sg, Ct);
  goto Cr;
 }
 else {
  printf("알수 없는 명령어 입니다. 다시 입력해 주세요\n");
  goto main;
 }
Cr:
 printf("물 11번\n빵 12번\n칼 13번\n권총14번\nAR 15번\nSR 16번\nSG17번\n없으면20번\n");
 scanf_s("%d", &com);
 if (com == 11) {
  if (not_safe_water >= 2) {
   printf("정화작업을 시작합니다.\n");
   not_safe_water--;
   not_safe_water--;
   water++; //더러운 물 두개를 깨끗한 물 하나로 정화합니다.
   goto Day;
  }
  else {
   printf("물자가 부족합니다.\n");
   goto Day;
  }
 }
 else if (com == 12) {
  if (wheat >= 3) {
   printf("빵을 굽기 시작합니다.\n");
   bread++;
   wheat--;
   wheat--;
   wheat--; //밀 3개를 빵하나로 만듭니다.
   goto Day;
  }
  else {
   printf("물자가 부족합니다.\n");
   goto Day;
  }
 }
 else if (com == 13) {
  if (iron >= 3) {
   printf("철로 칼을 제작합니다.\n");
   knife++;
   iron--;
   iron--;
   iron--; //철 3개를 칼하나로 만듭니다.
   goto Day;
  }
  else {
   printf("물자가 부족합니다.\n");
   goto Day;
  }
 }
 else if (com == 14) {
  if (iron >= 2) {
   if (lead >= 3) {
    printf("안전한 권총을 만들었습니다.\n");
    hand_gun++;
    iron--;
    iron--;
    lead--;
    lead--;
    lead--; //철 2개와 납3개로 권총을 만듭니다.
    goto Day;
   }
   else {
    printf("물자가 부족합니다.\n");
    goto Day;
   }
  }
  else {
   printf("물자가 부족합니다.\n");
   goto Day;
  }
 }
 else if (com == 15) {
  if (iron >= 3) {
   if (lead >= 5) {
    printf("돌격 소총을 제작합니다.\n");
    Ar++;
    iron--;
    iron--;
    iron--;
    lead--;
    lead--;
    lead--;
    lead--;
    lead--; //AR을 철 3개와 납5개로 만듭니다.
    goto Day;
   }
   else {
    printf("물자가 부족합니다.\n");
    goto Day;
   }
  }
  else {
   printf("물자가 부족합니다.\n");
   goto Day;
  }
 }
 else if (com == 16) {
  if (iron >= 4) {
   if (lead >= 6) {
    printf("스나이퍼라이플을 제작합니다.\n");
    Sr++;
    iron--;
    iron--;
    iron--;
    iron--;
    lead--;
    lead--;
    lead--;
    lead--;
    lead--;
    lead--; //SR을 철 4개와 납6개로 만듭니다.
    goto Day;
   }
   else {
    printf("물자가 부족합니다.\n");
    goto Day;
   }
  }
  else {
   printf("물자가 부족합니다.\n");
   goto Day;
  }
 }
 else if (com == 17) {
  if (iron >= 4) {
   if (lead >= 8) {
    printf("샷건을 제작합니다.\n");
    Sg++;
    iron--;
    iron--;
    iron--;
    iron--;
    lead--;
    lead--;
    lead--;
    lead--;
    lead--;
    lead--;
    lead--;
    lead--; //샷건을 철 4개와 납 8개로 제작합니다.
    goto Day;
   }
   else {
    printf("물자가 부족합니다.\n");
    goto Day;
   }
  }
  else {
   printf("물자가 부족합니다.\n");
   goto Day;
  }
 }
 else if (com == 20) {
  printf("제작을 그만 둡니다.\n");
  goto Day; //제작을 스킾합니다.
 }
 else {
  printf("다시 입력해 주세요.\n");
  goto Cr;
 }
Day:
 printf("탐방을 갑니다.\n");
 srand(time(NULL));
 item = rand();
 if (item >= 21) {
  printf("더러운 물과 밀이 하나씩 증가합니다.\n");
  not_safe_water++;
  wheat++;
  Ct--; //정찰 결과 더러운 물과 밀을 하나씩 얻습니다.
  goto Tr;
 }
 else {
  printf("납과 철이 하나씩 증가합니다.\n");
  lead++;
  iron++;
  Ct--; //정찰 결과 납과 철을 하나씩 얻습니다.
  goto Tr;
 }
Tr:
 printf("사람이 도착하였습니다.\n");
 srand(time(NULL));
 man = rand();
 if (man <= 28000) {  //여기에 있는 이 man의 숫자로 난이도를 설정합니다.
  if (Sg > 0) {
   printf("괴한에게 습격을 받았습니다.\n");
   Sg--;
   Ct--;
   Ct--;
   goto stat;
  }
  else {
   if (Sr > 0) {
    printf("괴한에게 습격을 받았습니다.\n");
    Sr--;
    Ct--;
    Ct--;
    Ct--;
    goto stat;
   }
   else {
    if (Ar > 0) {
     printf("괴한에게 습격을 받았습니다.\n");
     Ar--;
     Ct--;
     Ct--;
     Ct--;
     Ct--;
     Ct--;
    }
    else {
     if (hand_gun > 0) {
      printf("괴한에게 습격을 받았습니다.\n");
      hand_gun--;
      Ct--;
      Ct--;
      Ct--;
      Ct--;
      Ct--;
      Ct--;
      goto stat;
     }
     else {
      if (knife > 0) {
       printf("괴한에게 습격을 받았습니다.\n");
       knife--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       goto stat;
      }
      else {
       printf("괴한에게 습격을 받았습니다.\n");
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--;
       Ct--; //캐릭터의 체력이 16만큼 까입니다.
       goto stat;
      }
     }
    }
   }
  }
 }
 else {
  printf("지나가던 사람입니다.\n");
  goto stat; //무사히 종료합니다.
 }
stat:
 printf("당신이 보유중인 더러운 물 %d개,밀 %d개,철 %d개,납 %d개\n물 %d개,빵 %d개,칼 %d개,권총 %d개,돌격소총 %d개,저격소총 %d개,샷건 %d개\n그리고 캐릭터의 남은 채력 %d\n", not_safe_water, wheat, iron, lead, water, bread, knife, hand_gun, Ar, Sr, Sg, Ct); //상태창으로 자신이 소유중인 것의 갯수를 표기합니다.
 printf("20을 눌러 계속 진행합니다.\n");
 scanf_s("%d", &com);
 if (com == 20) {
  if (Ct >= 1) {
   printf("빵을 먹어서 피를 회복하시겠습니까??\n111을 눌러서 여부를 확인해 주세요\n아닐시 다른 숫자인 20을 눌러주시면 됩니다.\n");
   scanf_s("%d", &com);
   if (com == 111) {
    if (bread < 1) {
     printf("빵이 부족합니다.\n");
     goto THiRsT;
    }
    else {
     bread--;
     Ct++;
     Ct++;
     Ct++;
     Ct++;
     goto THiRsT;
    }
   }
   else {
    if (Ct <= 0) {
     goto Game_Over; //게임을 종료합니다.
    }
    else {
     goto THiRsT;
    }
   }
  }
 THiRsT:
  if (thirst >= 1) {
   printf("물을 마시겠습니까?맞다면 222 아니라면 다른 숫자를 눌러주세요\n");
   scanf_s("%d", &com);
   if (com == 222) {
    if (water < 1) {
     printf("물이 부족합니다.\n");
     goto main;
    }
    else {
     water--;
     thirst++;
     thirst++;
     if (Ct <= 0) {
      goto Game_Over; //게임을 종료합니다.
     }
     goto main;
    }
   }
   else {
    if (thirst < 0) {
     goto Game_Over;
    }
    else {
     if (Ct <= 0) {
      goto Game_Over; //게임을 종료합니다.
     }
     else {
      goto main;
     }

    }

   }

  }
 }
 else {
  printf("오류입니다.\n");
  goto stat;
 }
Game_Over:
 printf("게임오버\n");
 return 0;
}

이렇게 종료가 됩니다.

이것의 코드를 17/03/2018기준으로 전부 해독이 가능해 지리라고 생각합니다.

오픈소스로 전환하는 이유는 리마스터링하고 있기때문이고 엔딩추가와 소스코드 개편 작업을 진행하고 있기 때문입니다.

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,
어서오세요! 판타지 학원에!
라는 게임을 제작하게 되었습니다.
캐릭터와 모든 것이 전부 초안이고 아직 많이 미숙한 점도 있지만
학생 여럿이서 모여서 만들게 된 첫 작품인 만큼 웃으면서 봐주시면 감사하리라고 생각을 합니다.
초안이라 언제든지 수정이 가능하리라고 생각을 합니다.


첫번째로 학생회장인 가희입니다.

남자 주인공의 친구인 세훈입니다.

같은 학년의 예신입니다.


마지막으로 후배인 혜린입니다.

각각의 캐릭터의 외모나 여러가지 면은 언제든 바뀔 수가 있습니다.
일단 미리 생각을 하고 있는 설계와 그런 것들은 전부 비공개 처리를 하겠습니다.

캐릭터의 외모 또한 바뀔 수 있음을 미리 알려드리겠습니다.


배경 : 마법학원

시기 : 2학기 끝나갈 즈음 날자 상으로는 10월 초

세부적인 배경은 아직 정보를 공개하지는 못하지만(게임의 특성상...) 그러한 면을 제외하고는 공개가 가능한 여부의 정보는 최대한 많이 공개를 하도록하겠습니다.

그리고 게임 개발에 대한 실시간으로 개발 진행 여부에 대하여 게시를 계속하도록 하겠습니다.



(인사말)

이번 게임의 1차 기획안을 작성한 KILO [SHADE] 라고 합니다.

저는 이번 게임 배경에 관심을 많이 있어서 아마 2차나 최종까지 캐릭터는 수정되더라도 배경만큼은 제발 수정이 안 되었으면 합니다.

학생들이 모여서 개발하는 과정을 전부 담으려고 합니다.

그러니 부디 관심있게 봐주셨으면 합니다.



블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

모든 프로그래밍 언어가 그렇듯 항상 'Hello World!'로 시작을 합니다.

그래서 이번에도 Hello world! 로 시작을 하도록 하겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
using System;
 
namespace Ex
{
  class HW
  {
    static void Main(string[] args) 
    {
      Console.WriteLine("Hello World!");
    }
  }
}
cs

이렇게 소스 코드를 작성 하였습니다.

제가 기존에 C언어를 진행하면서 여러가지를 설명해 드렸습니다.

C언어보다 ++된 것이 C++이며 이 C++보다 ++된 것이 C#입니다.

그러니 C언어에서 2번 나아진 언어라고 볼 수 있고, 이러한 언어를 유니티에서 사용을 하기 때문에 이렇게 C#을 진행하게 되었다라고 하는 것도 과언이 아닙니다.

아무튼 이제 이 소스코드를 전부 옮기셨을 것이라고 생각을 하기 때문에 저는 이 소스코드를 해부해 보도록 하겠습니다.

먼저 1번줄인 using System;을 보면

영어의 뜻을 생각하면 편합니다.

C언어와 마찬가지로 세미콜론은 그 줄을 마친다라는 의미를 가집니다.(다음 줄로 넘어가라라는 의미)

using은 미리 정의를 내려버린 키워드라는 녀석입니다.

그리고 다시 1번 줄을 보자면 System을 사용한다 라는 말이 됩니다.

그러면 System이라는 것이 무엇이 되는가?? 이것이 궁금해 지리라고 저는 믿습니다.

System이라는 것은 숫자나 텍스트와 같은 데이터를 다룰 수 있는 기본적인 데이터 처리 클래스를 비롯한 C#코드가 기본적으로 필요로 하는 클래스를 담고 있는 네임스페이스입니다.

(단어 설명들 입니다.)


그래서 using System; 이라고 한 것은 컴파일러에게 네임스페이스 속 클래스를 사용하겠다고 컴파일러에게 알리는 역할을 합니다.

3번줄과 같은 네임스페이스(엔에스 또는 ns)를 만들때는 'namespace 키워드'를 이용하며, ns_이름 뒤에 따라오는 {와 } 사이에는 이 ns에 소속되는 클래스 등이 들어갑니다.

1
2
3
4
5
6
namespace ns
{
  //클래스
  //구조체
  //인터페이스 등등
}

그래서 Ex라는 ns에 HW클래스를 담는 것입니다.

다음은 class HW를 보도록 하겠습니다.

아까 말을 하였듯이 ns에 class(이하 클)가 들어갑니다.

위에 ns를 설명할 때 사용하였던 설명을 보시면 클이 들어가 있는 것이 보이시리라고 생각을 합니다.

그리고 마지막으로 '//'인 주석에 대하여 설명을 하고 이번 강좌를 마치겠습니다.

//는 주석이라는 것으로 주석은 모든 프로그래밍 언어에서 여기서 부터 줄이 바뀔 때까지 나오는 문장은 사용을 하지 않아 라는 의미를 담고 있습니다.

메소드는 따로 설명을 드리도록 하겠습니다.

저는 이만 가보겠습니다.

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

c#강좌를 시작하기에 앞서서 그냥 간단하게 대규모 서론...?을 한번 해보려고 합니다.

C#을 해야겠다고 느끼게 된 이유는 그냥 간단합니다.

게임을 만들려고 유니티를 키니 C#만 지원하겠다고 하더라구요.

그러한 이유로 아... C#을 하자

이렇게 되었던 것이구 이왕 나 배우는데 나혼자 배우는 것 보다.

독학으로 하면서 블로그에 강좌를 올리는 것은 어떠한가?? 하고 생각이 들어서 올리게 되었습니다.

그런데 생각을 해보니 C#을 하기 전에 C언어를 해야겠더라구요.

자바를 하던 파이썬을 하던 C#을 하던 상관은 없습니다만.

왜 굳이 C#이 아닌 C부터 시작을 했어야 했는지 그것을 설명하도록 하겠습니다.

C#이던 파이썬이던 자바던 사람들이 C언어의 단점을 매우고 보다 더 간편한 프로그래밍 언어를 사용하고자 개량을 한 것이 C#과 파이썬 이런 언어들입니다.

솔직히 생각을 해 보세요.

C가 기초고 C#이 중급반입니다.

그런데 기초도 없는 사람이 과연 C#을 이해하고 활용이 가능할까?? 하는 생각이 들었습니다.

그래서 저는 매우 당연하게도 C언어를 먼저 시작을 하였던 것이고

조만간 C언어가 기초코스가 끝이 납니다.

그래서 저는 여러분들에게 슬슬 C#을 시작해도 상관없지 않을까?? 하고 생각을 합니다.

그러면 저는 이만 가보도록 하겠습니다.

앞으로 올라올 많은 C#강좌들을 보시면서 더욱 다양한 프로그래밍 언어를 접해 보셨으면 하는 바렘이 있습니다.

블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

return이라는 것은 2가지 의미를 가집니다.

-함수를 빠져나간다.

-값을 반환한다.

제가 void에는 return을 쓰면 안된다라는 느낌으로 설명이 적혀있는 것을 보고 매우 당황을 하였지만 수정은 하지 않았습니다.

이유는 뭐 어떤 방면에서는 맞는 말이 될 수도 있으니 변수가 있다면 어짜피 return을 따로 강좌를 작성할 때 하는 것으로 하자는 느낌으로 하였습니다.

그래서 저는 이번 시간을 이용하여 다시 말하도록 하겠습니다.

void가 있다고 해서 return을 쓰지 못하는 것은 절대로 아닙니다.

void인 반환형에서도 return이 쓰이는 경우가있습니다.

이렇게요

1
2
3
4
void NRtT(int num) {
  if (num < 0) {
    return;
  -----
cs

(출처 : 윤성우 - 열혈 C 프로그래밍)

반환값이 명시되어 있지 않은 경우의 코드이다.

위의 코드같은 경우는 반환하는 값이 없이 빠져나갈 때 사용을 한다.

함수를 빠져나가는 목적이라면 void에서 return이 사용이 된다고 하더라도 상관이 전혀 없다.


값을 반환 한다면 return에 이어서 오는 부분에 하는 것이다.

이어서 오는 부분이 없는 경우는 위에 코드와 같은 경우가 되는 것이다.


블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,

저번 시간에 말을 하였듯이 그러면 어떤 경우에 어떻게 해야하는 지 그것에 관하여 설명을 하도록 하겠습니다.

return이라는 것이 원래 돌려보낸다라는 것입니다.

나중에 따로 강좌를 적겠지만 미리 한번 거론을 하자면 return 0;라는 것도 0번 줄로 보낸다라는 느낌이거든요.

그런 관계로 return이라는 문법이 쓰이는지 안 쓰이는지에 따라서 쓰인다면 반환하는 값이 있다라고 해서 시작하는 구간이 void가 아닌 int가 쓰이게 되는 것입니다.

그러면 언제 (void)를 써야 하는 지 그것이 궁금할 것이라고 저는 추론을 합니다.

그래서 설명을 드리자면 (int dd)하면서 시작할 때 int라는 것은 함수를 시작한다! 가 아닌 전달인자라는 것이됩니다.

전달인자라는 것이 없으면 (void)를 쓰게 되는 것입니다.

그렇다면 그 전달인자라는 것이 무엇인가??

전달인자라는 것은 다른 함수와 연결이 되는 느낌의 변수들을 전달인자라고 합니다.

//확실한 것은 아니나 그러한 느낌이 있다보니 일단 이렇게 설명하겠습니다. 100% 확신하고 받아들이시지 마세요!

그리고 마지막으로 함수라는 것은 이미 한번 정의 된 경우 언제든지 다시 호출이 가능해진다.

이번에는 간단하게 진행이 되었습니다.

다음강좌에서 보도록합시다.


블로그 이미지

이사가는 사람

안녕하세요 블로그를 옮기려고 생각하고 있습니다. 해당 블로그는 폐기하고 다음 다른 블로그에서 뵙도록 하겠습니다. 감사합니다!

,