728x90

사용자 삽입 이미지
A massively multiplayer online game (also called MMOG or simply MMO) is a video game which is capable of supporting hundreds or thousands of players simultaneously. By necessity, they are played on the Internet, and feature at least one persistent world. They are, however, not necessarily games played on general purpose computers; most of the newer game consoles (Xbox 360, PSP, PS3, Wii, etc.) can access the internet, and thus can have MMO genre games.

MMOGs can enable players to cooperate and compete with each other on a grand scale, and sometimes to interact meaningfully with people around the world. They include a variety of gameplay types, representing many video game genres. Many MMOGs require players to invest large amounts of their time into the game. Most MMOGs require a monthly subscription fee, but some can be played for free.
-------------------------------------------------------------------------------
사실 MMO란 걸 오늘 첨 들어봤다. 뭘까? 찾아봤더니 위키백과에 누가 글을 올려놨다.(여담이지만 위키백과에 글 올리는 사람들 대단하다.)
상당히 많은 사람들이 함께 즐기는 온라인 게임이란다. 요즘 무기들고 몬스터와 싸우고 상점가서 물건사는 게임들중 다중사용자를 지원하는 대부분의 게임을 말한다.

중요한 것은 인터넷기반 컴퓨터 뿐만 아니라 Xbox 360, PSP, PS3, Wii등과 같은 게임 콘솔역시 네트워크를 지원함으로써 MMO를 지원한다는 것이다. 게임 프로그래머들 앞으로 서버관리와 트래픽처리 필수로 공부해야 겠다.

Player base

Comparing MMOGs to other games

MMORPG라고 해도 스토리도 있고 퀘스트도 있고 일반 RPG처럼 스토리를 따라 진행해 나가는 것들도 꽤 있다. 하지만 MMO의 특징은 ending이 없다는 것이다. 끝없이 계속 한다. 나중에는 현질하는 재미에 빠져서라도 한다.
예전엔 멀티플레이를 지원해줘도 서버당 50명 미만을 모델로 했었다. 개인이 즐기거나 몇몇 친구들과 파티로 즐기는 여행쯤이었는데 MMO는 사람이 안보이면 재미가 없다.
인기좋은 MMO게임을 보면 서버가 여러개 있는 것을 볼 수 있는데 그것은 서버당 동시접속자를 4~5천개 미만으로 생각하기 때문이란다. 뭐 이 부분은 회사 사정마다 다를 것 같다. 장비가 좋고 돈이 많은 회사는 동시접속자가 많아도 되도록 지원할수도 있지 않을까.
사정이 이렇다보니 유저를 여기저기 퍼트려 놓는 것도 중요한 과제가 되었다. 사양이 떨어지는 컴퓨터로 온라인 게임을 즐기다보면 사람이 많은 곳만 가면 순간이동을 해대는 장면을 볼 수있다.(주로 그래픽카드가 딸려서 그렇다.) 이런 현상을 막기 위해서 맵을 크게 만든다. 맵을 크게 만들기 위해서는 세계관도 커져야 한다. 스토리가 방대하고 세계관이 크면 유저를 오래 붙잡아 둘 수있는 힘도 얻게 되니 여러가지로 이점이 있다. 단 스토리와 세계관이 너무 방대하면 유저가 이해하기 힘들어해서 포기할수도 있다.
------------------------------------------------------------------------------------
그런데 한국은 게임 유저들은 세계적인데 비해 게임산업은 제대로 뜨질 못하고 있다.

KTH가 자사 게임포털 '올스타'의 지속된 부진과 함께 최근 선보인 게임들의 잇단 실패로 게임사업 최대 위기를 맞이할 것으로 보인다.

728x90
728x90
bluelimn's programming

우리 귀여운 변수, 함수들 이름 잘지어서 '누구냐 너는'따위의 말 듣지 않도록 해주자.


요즘 세상은 메모리가 심하게 부족하지도 않고 컴퓨터가 무지 느리지도 않다. 그리고 프로젝트이 규모가 점점 커지고 있어 혼자서 프로젝트를 기획하고 완성시키는 경우는 거의 없다. 이런 세상에서 훌륭한 코드란 알아보기 쉬운 코드다.
물론 기본이 되는 것은 정확성이다. 제대로 작동하지 않으면 아무런 소용이 없다. 여기서 말하는 것은 어떤 프로그램을 만드는가가 아니다. 이곳은 프로그램이 돌아가는데는 큰 지장을 주지 않지만 알아보기 쉽고 유지보수에 편리한 습관이 무엇인지에 대해 고민하는 곳이다.

이름이 생명이다.
이름만 잘 지어놔도 설명할 것이 거의 없어진다. 특히 영어에 익숙하지 않은 사람들은 한영사전이 필수다.
그럼 어떻게 이름을 지어야 한단 말인가?

1. 변수 -> 명사로
   함수 -> 동사 or 동명사
로 짓는다.
변수(멤버변수, 속성)는 data의 의미를 가지고 있기 때문에 명사로 이름짓는다.
함수(멤버펑션, 메쏘드)는 동작하는 하나의 기능을 나타내기 때문에 동사로 짓되 힘든 경우 동명사로 짓는다.

2. 대문자 혹은 _로 단어를 구분한다.
numOfValuses 혹은 num_of_values // getData(...) 혹은 get_data(...)
이런 식으로 사용하는 것이 원칙이다. 나의 경우엔 변수는 _로 구분하고 함수는 대문자로 구분하여 이름만으로 변수인지 함수인지도 구분할 수 있도록 사용하고 있다.

3. 알파벳으로 시작하라.
C#이나 JAVA같이 유니코드를 사용하는 언어는 한글로 변수화 함수를 작성해도 무관하다. (난 가끔 한글로 작명하기도 한다.ㅋㅋ) 하지만 한국에서만 사용되는 source로 만들고 싶지 않다면 아무래도 영어를 사용하는 것이 좋다. 영어로 작명을 하는 경우 이름 중간에 공백이나 특수문자를 사용할 수 없고 숫자로 시작할 수 없다는 대 원칙만 지키면 이름으로 사용할 수 있지만 그럼에도 주의할 것은 있다.
_(under bar)로 시작하는 이름은 system변수와 이름이 같을 수도 있으니 주의해야 한다. 당신이 무지 잘난 인간이 아니라면 사용하지 말기를 권장한다.
대문자로 시작하는 것은 class다. class의 경우 반드시 대문자로 시작해야 한다. 그러니 다른 것(변수,함수)들은 소문자로 시작하는 것이 좋다.
728x90
728x90
커리큘럼을 복사해온 것을 보다가 연산자부분은 그냥 넘어가면 안되겠다 싶어서 손을 대게 되었다.
특히 비트연산자는 눈여겨볼 필요가 있다.
연산자 - 단항, 산술, 쉬프트-비트, 관계, 논리, 삼항, 대입
대략 이런 식으로 분류할 수 있단다.

1. 단항 연산자
말 그대로 operend가 하나다. 같은 수식도 위치에 따라 쓰임이 달라지는데 특히 단항 연산자가 그렇다.
종류 : + , - , ++, --
예 : int a = 10;이라고 가정해보자.
+10, -10, +a, -a (상수나 변수가 음수인지 양수인지를 나타낸다.)
++a, a++, --a, a-- (많이 사용되지만 결코 쉽지 않은 연산이다. ++은 a의 값을 1증가시켜 a에 대입하고 --는 그 반대다. 하지만 ++a처럼 연산이 앞에(선행) 있으면 해당 line에서 이미 연산이 되고 a++처럼 뒤에(후행) 있으면 다음 줄로 넘어갈 때 연산이 된다. 이 연산은 상수에는 사용할 수 없다.)
프로그래밍 습관에 대해서는 다른 카테고리에 계속 글을 올리겠지만 증가,감소연산자를 대입연산과 함께 사용하는 것은 아주 위험한 일이다.
=========================================
1.           a = 10;
             a = ++a - --a + a++;
             printf("%d\n",a);
-----------------------------------------
 2.        a = 10;
            printf("%d\n", ++a - --a + a++);
=========================================
1번과 2번 소스는 출력 결과가 다르게 나온다. 그런데 중요한 것은 이런 수식이 사용되면 안된다는 것이다. 이런 수식을 잘 사용한다고 자랑하는 것은 멀쩡한 손 놔두고 발로 젓가락질 할 줄 안다고 자랑하는 것과 비슷하다. 누누히 말하지만 소스를 보는 사람이 바보라고 생각하고 최대한 알아보기 쉽게 작성해야 한다.

2. 산술 연산자
종류 : + - * / %
예 : 우리가 생각하는 사칙연산과 똑같이 사용하면 된다. 사칙연산이라면서 왜 다섯개야?라고 생각한 당신! 눈치가 빠르다.
+ : 더하기
- : 빼기
* : 곱하기
/ : 나누기
%: 모듈러
+ -
는 단항연산에서도 사용되었다. 어떻게 쓰이느냐에 따라 연산이 달라진다는 것이다. 양쪽에 operend(피연산자)가 있으면 산술연산으로 계산되니 염두해두자. 그리고 C언어에서 이러한 연산들을 구분하는 것으로 띄어쓰기도 작용을 하므로 주의해야 한다. space bar한번에 전혀 엉뚱한 연산이 작동할 수도 있다.
b - --a, b - - -a, b-- -a 이 세가지가 모두 다르다는 말이다.
/연산은 나누기와 같은데 주의할 점은 C언어에서 int의 나누기연산이다. int는 정수를 취급하기 때문에 나누기 연산의 몫에서 정수부분만 가져온다. 이때 내림을 하는데 15/4의 경우 3.75가 아니라 3이 나온다.
%연산은 유용한 사용이 많으니 잘 기억해두자. 사칙연산도 아니면서 같이 껴 있으면 얼마나 중요한 녀석인지 감 잡아야 한다. 이녀석은 15%4의 결과로 3이 출력된다. %의 사용은 다방면으로 많은데 그중 흔히 사용되는 경우가 반복문 내에서 if문과 함께 사용되는 경우다.
if( i % 3 == 0) 이렇게 사용하면 i가 3의 배수일 때마다 if문이 작동한다.

3. 관계연산자
종류: <, >, <=, >=, ==, !=

A < B : A가 B보다 작다
A > B : A가 B보다 크다
A <= B : A가 B보다 작거나 같다. (작아도 true, 같아도 true)
A >= B : A가 B보다 크거나 같다. (커도 true, 같아도 true)
A == B : A와 B는 같다.
A != B : A와 B는 같지 않다.
주의할 것은 앞에 있는 A가 중심이고 식의 결과는 true나 false가 된다. C의 경우 true나 false의 개념이 없기 때문에 true는 1이 false는 0이 return된다.
(TIP: C에서는 0이면 false이고 나머지 다른 값이면 true가 된다.)

4. 삼항연산자
종류: 수식?A:B
예: (a>b) ? a++ : b++;
수식의 값이 참(true)이면 A가 실행되고 거짓(false)이면 B가 실행된다. 잘 사용되지 않는 수식이지만 복잡하고 긴 수식을 한방에 조지는 마법같은 효과가 있다.

5. 논리연산자
종류: &&, ||, !
ADN, OR, NOT이라고 부른다.
논리연산자는 계산식을 operend로 하는 것을 원칙으로 한다.
A && B : 두 식이 모두 참이다. (두 식이 모두 true면 true, 아니면 모두 false)
A || B : 둘중 하나는 참이다.(두 식이 모두 false면 false, 아니면 모두 true)
!A : A의 결과를 반대로~ (A가 true면 false, A가 false면 true)

6. 비트연산자
사실 내가 비트연산자 때문에 글을 쓰게 되었다. 비트연산은 조금쯤 깊이있게 생각해야 하기 때문에 일반적인 프로그래밍에서 많이 사용하지 않는 것이 좋다. 하지만 비트연산은 산술연산보다 확실히 빠르므로 반복횟수가 많고 계속적인 연산이 있을 경우, 비트연산이 편리한 수식일 경우 비트연산을 잘 사용하면 효율적이다.
종류 : &, |, ~
&(AND) : 비트가 둘다  1이면 1 아니면 0
|(OR) : 비트가 둘다 0이면 0 아니면 1
~(NOT): 비트 반대로
예)
이해만 확실히 하면 전혀 어려운 개념이 아니다. 다만 2진수로 생각해야 한다는 것이 문제다.

7. shift(쉬프트)
종류 : >>, <<
에) 20 << 3 이거 결과로 80 나온다. 왜 그런지 알아보자
20 : 0000 0001 0100
<<3
결과 : 0000 1010 0000
왼쪽으로 3칸 이동한 것을 볼 수 있다. shift연산자는 방향에 따라 이동하기때문에 헷갈리기 쉽다.
화살표가 있다고 생각하면 기억하기 쉽다.
<<------- 요녀석 왼쪽으로 이동하라는 이야기
------------>> 요녀석 오른쪽으로 이동하라는 이야기
주의: >> 요녀석 주의해야 한다. <<는 오른쪽에 0으로 무조건 채우면 된다.
그런데 >>는 MSB에 따라 달라진다. 그러니까 가장 왼쪽에 있는값이 1이면 1로 채우고 0이면 0으로 채워야 한다. 그러니까 양수면 0으로 채우고 음수면 1로 채우라는 이야기!
728x90
728x90
교육쿼리큘럼
· C언어 소개, 역사, 구성요서 및 형식, 컴파일러, 프로그램 실습
· 계산식 출력 및 상수와 변수
· 자료형과 형변환
· 연산자 - 단항, 산술, 쉬프트, 관계, 논리, 삼항 대입
· 입출력 함수 및 제어문
· for, if, switch case, while, break, do while
· 배열 - 1차원, 2차원, 3차원 배열
· 포인터, 함수
· 선처리부와 기억류
- 매크로, 외부파일 포함, 조건부 컴파일
- auto, 지역변수, 전역변수, static, extern변수
· 구조체
- 구조체 주소변수, 배열, 다중구조체, 자기 참조 구조체
· 클래스
- 맴버 변수, 멥버함수, 오버로드, 인라인, Const 멤버함수
· 생성자, 복사, 생성자, 소멸자
· 오브젝트 배열, const 오브젝트, this 포인터, static 함수/변수· 상속
- 상속방식, 오버라이드
· 다형성
- 강상, 순수 가상 함수
· 파일입출력
- 텍스트 파일, 이진파일
· Wind32 어플리케이션
- 개요, WinMain()함수
- 윈도우, 프로시저, 헝가리안 표기법
· 사건 지향 프로그래밍, 그래픽, 이벤트 처리
· 대화 상자 이용, 소켓 API함수
- 소켓을 이용한 서버와 클라이언트 프로그램



교육쿼리큘럼
· JAVA 프로그래밍 언어 소개
· Java 프로그래밍 언어 개요
· 컴퓨터 커뮤니케이션 문제 및 해결 방법
· Java 프로그래밍 도구 / 객체 지향 분석 및 디자인
· Java 프로그래밍 언어 기본 / 객체 및 프로그래밍 구조
· 연산자, 유형 변환(casting) 및 결정 구조 / 루프구조
· 객체 지향 기능 및 Java 프로그래밍 언어
· 메소드 사용 /
· 객체 지향 Java 프로그래밍 및 배열
· 상속 및 고급 Java 개념
· 고급 객체 지향 개념
· 그래픽 사용자 인터페이스(GUI) 개발
728x90

+ Recent posts