<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://old.wiki.ubuntu-kr.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=91.236.74.180</id>
	<title>Ubuntu Korea Community Wiki - 사용자 기여 [ko]</title>
	<link rel="self" type="application/atom+xml" href="https://old.wiki.ubuntu-kr.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=91.236.74.180"/>
	<link rel="alternate" type="text/html" href="https://old.wiki.ubuntu-kr.org/index.php?title=%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/91.236.74.180"/>
	<updated>2026-10-17T01:33:31Z</updated>
	<subtitle>사용자 기여</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://old.wiki.ubuntu-kr.org/index.php?title=Game_Programming&amp;diff=1992</id>
		<title>Game Programming</title>
		<link rel="alternate" type="text/html" href="https://old.wiki.ubuntu-kr.org/index.php?title=Game_Programming&amp;diff=1992"/>
		<updated>2014-11-05T19:11:31Z</updated>

		<summary type="html">&lt;p&gt;91.236.74.180: romana powloka&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== C++을 이용한 게임 만들기 ==&lt;br /&gt;
* C++로 게임 제작의 기본기를 쌓는것이 목적&lt;br /&gt;
* Beginnning C++ Through Game Programming의 내용을 간략화했다.&lt;br /&gt;
&lt;br /&gt;
=== 왜 C++인가 ===&lt;br /&gt;
* C++은 빠른편이고, 고급언어인 편에 속한다.&lt;br /&gt;
* 사실상 업계 표준임.&lt;br /&gt;
* C에 비해 Object Oriented 프로그래밍이 쉽다.&lt;br /&gt;
=== Game Over ===&lt;br /&gt;
* C++로 Game Over를 짜보자&amp;lt;s&amp;gt;Hello world랑 뭐가 다른건데!!&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Game Over&lt;br /&gt;
// A first C++ program&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Game Over!&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Game Over 2.0을 짜보자&amp;lt;s&amp;gt;조또 바뀐것 없다.&amp;lt;/s&amp;gt;&lt;br /&gt;
* 네임스페이스를 써서 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Game Over 2.0&lt;br /&gt;
// Demonstrates a using directive&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Game Over!&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Game Over 3.0이다.&amp;lt;s&amp;gt;반복학습 쩐다&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Game Over 3.0&lt;br /&gt;
// Demonstrates using declarations&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using std::cout;&lt;br /&gt;
using std::endl;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Game Over!&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 비싼 계산기 ===&lt;br /&gt;
* 연산자를 이해하기 위해 비싼 계산기를 짜보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Expensive Calculator&lt;br /&gt;
// Demonstrates built-in arithmetic operators&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;7 + 3 = &amp;quot; &amp;lt;&amp;lt; 7 + 3 &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;7 - 3 = &amp;quot; &amp;lt;&amp;lt; 7 - 3 &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;7 * 3 = &amp;quot; &amp;lt;&amp;lt; 7 * 3 &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;7 / 3 = &amp;quot; &amp;lt;&amp;lt; 7 / 3 &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;7.0 / 3.0 = &amp;quot; &amp;lt;&amp;lt; 7.0 / 3.0 &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;7 % 3 = &amp;quot; &amp;lt;&amp;lt; 7 % 3 &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;7 + 3 * 5 = &amp;quot; &amp;lt;&amp;lt; 7 + 3 * 5 &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;(7 + 3) * 5 = &amp;quot; &amp;lt;&amp;lt; (7 + 3) * 5 &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== 게임 스탯 ===&lt;br /&gt;
* 비행 슈팅게임에서 상태출력에 대해 생각하려 한다.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Game Stats&lt;br /&gt;
// Demonstrates declaring and initializing variables&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    int score;&lt;br /&gt;
    double distance;&lt;br /&gt;
    char playAgain;&lt;br /&gt;
    bool shieldsUp;&lt;br /&gt;
&lt;br /&gt;
    short lives, aliensKilled;&lt;br /&gt;
&lt;br /&gt;
    score = 0;&lt;br /&gt;
    distance = 1200.76;&lt;br /&gt;
    playAgain = 'y';&lt;br /&gt;
    shieldsUp = true;&lt;br /&gt;
    lives = 3;&lt;br /&gt;
    aliensKilled = 10;&lt;br /&gt;
    double engineTemp = 6572.89;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nscore: &amp;quot; &amp;lt;&amp;lt; score &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;distance: &amp;quot; &amp;lt;&amp;lt; distance &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;playAgain: &amp;quot; &amp;lt;&amp;lt; playAgin &amp;lt;&amp;lt; endl;&lt;br /&gt;
    // Bool 표현은 애매하므로 shieldup은 생략한다.&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;lives: &amp;quot; &amp;lt;&amp;lt; lives &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;aliensKilled: &amp;quot; &amp;lt;&amp;lt; aliensKilled &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;engineTemp: &amp;quot; &amp;lt;&amp;lt; engineTemp &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    int fuel;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nHow much fuel? &amp;quot;:&lt;br /&gt;
    cin &amp;gt;&amp;gt; fuel;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;fuel: &amp;quot; &amp;lt;&amp;lt; fuel &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    typedef unsigned short int ushort;&lt;br /&gt;
    ushort bonus = 10;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nbonus: &amp;quot; &amp;lt;&amp;lt; bonus &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 어디서 많이 보던 것들이지?&amp;lt;s&amp;gt;겜 좀 해봐야 겜을 만들징&amp;lt;/s&amp;gt;&lt;br /&gt;
* 이제 좀 계산하는 방법에 대해 알아보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* game_stats2.cc */&lt;br /&gt;
// Game Stats 2.0&lt;br /&gt;
// Demonstrates arithmetic operations with variables&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    unsigned int score = 5000;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;score: &amp;quot; &amp;lt;&amp;lt; score &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    // 값을 살짝 바꾼다.&lt;br /&gt;
    score = score + 100;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;score: &amp;quot; &amp;lt;&amp;lt; score &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    // 값 증가의 다른 버전&lt;br /&gt;
    score += 100;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;score: &amp;quot; &amp;lt;&amp;lt; score &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    // 값 증가의 또다른 버전&lt;br /&gt;
    int lives = 3;&lt;br /&gt;
    ++ lives;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;lives: &amp;quot; &amp;lt;&amp;lt; lives &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    lives = 3;&lt;br /&gt;
    lives++;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;lives: &amp;quot; &amp;lt;&amp;lt; lives &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    lives = 3;&lt;br /&gt;
    int bonus = ++lives * 10;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;lives, bonus = &amp;quot; &amp;lt;&amp;lt; lives &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; bonus &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    lives = 3;&lt;br /&gt;
    bonus = lives++ * 10;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;lives, bonus = &amp;quot; &amp;lt;&amp;lt; lives &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; bonus &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    // 정수 최대값은 결국?&lt;br /&gt;
    score = 4294967295;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nscore: &amp;quot; &amp;lt;&amp;lt; score &amp;lt;&amp;lt; endl;&lt;br /&gt;
    ++score;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;score: &amp;quot; &amp;lt;&amp;lt; score &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 자. 이제 3.0이다&amp;lt;s&amp;gt;뭔 이따위것까지 3.0이여&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* game_stats3.cc */&lt;br /&gt;
// Game Stats 3.0&lt;br /&gt;
// Demonstrates constants&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    const int ALIEN_POINTS = 150;&lt;br /&gt;
    int aliensKilled = 10;&lt;br /&gt;
    int score = aliensKilled * ALIEN_POINTS;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;score: &amp;quot; &amp;lt;&amp;lt; score &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    enum difficulty (NOVICE, EASY, NORMAL, HARD, UNBEATABLE);&lt;br /&gt;
    difficulty myDifficulty = EASY;&lt;br /&gt;
&lt;br /&gt;
    enum ship (FIGHTER = 25, BOMBER, CRUISER = 50, DESTROYER = 100);&lt;br /&gt;
    ship myShip = BOMBER;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nTo upgrade my ship to Cruiser will cost &amp;quot; &amp;lt;&amp;lt; (CRUISER - myShip) &amp;lt;&amp;lt; &amp;quot; Resource Points.\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 상수의 사용법이다.&lt;br /&gt;
* 안바뀌는건 const 지정을 해놓으면 나중에 편하다.&lt;br /&gt;
* 열거형 변수. 짜증나게 값 입력을 안해놨으니 이해가 힘들거임.&amp;lt;s&amp;gt;좀 복붙이라도 하던지.&amp;lt;/s&amp;gt;&lt;br /&gt;
* 한번 돌려보면 어느정도 감이 잡히는거고, 내용을 설명하기엔 좀..&amp;lt;s&amp;gt;이럴때 책이 필요한거임. 다른 언어 해본사람은 금방 눈에 들어올거고.&amp;lt;/s&amp;gt;&lt;br /&gt;
=== Lost Fortune ===&lt;br /&gt;
* 기본을 어느정도 했으면 진짜 간단한거 하나 해보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* lost_fortune.cc */&lt;br /&gt;
// Lost Fortune&lt;br /&gt;
// A personalized adventure&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using std::cout;&lt;br /&gt;
using std::cin;&lt;br /&gt;
using std::endl;&lt;br /&gt;
using std::string;&lt;br /&gt;
&lt;br /&gt;
/* string을 포함했다. 이건 표준 라이브러리의 일종인데, 문자열 처리를 위한 라이브러리다. */&lt;br /&gt;
&lt;br /&gt;
/* 사용자 정보를 입력받자. */&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    const int GOLD_PIECES = 900;&lt;br /&gt;
    int adventurers, killed, survivors;&lt;br /&gt;
    string leader;&lt;br /&gt;
&lt;br /&gt;
    // 플레이어 정보를 입력받는다.&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Welcome to Lost Fortune\n\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Please enter the following for your personalized adventure\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Enter a number: &amp;quot;;&lt;br /&gt;
    cin &amp;gt;&amp;gt; adventurers;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Enter a number, samller than the first: &amp;quot;;&lt;br /&gt;
    cin &amp;gt;&amp;gt; killed;&lt;br /&gt;
&lt;br /&gt;
    survivors = adventurers - killed;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Enter your last name: &amp;quot;;&lt;br /&gt;
    cin &amp;gt;&amp;gt; leader;&lt;br /&gt;
&lt;br /&gt;
    /* GOLD_PIECES는 모험가들이 찾는 행운의 금 조각이다. adventurers는 모험가의 숫자, killed는 모험하다 뒈진 사람의 숫자다. 여기서는 당신이 생존자 리더다. */&lt;br /&gt;
&lt;br /&gt;
    // 스토리텔링&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n A brave group of &amp;quot; &amp;lt;&amp;lt; adventurers &amp;lt;&amp;lt; &amp;quot; set out on a quest &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;-- in search of the lost treasure of the Ancient Dwarves. &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The group was led by that legendary rogue. &amp;quot; &amp;lt;&amp;lt; leader &amp;lt;&amp;lt; &amp;quot;.\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n Along the way. a band of marauding ogres ambushed the aprty. &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;All fought bravely under the command of &amp;quot; &amp;lt;&amp;lt; leader;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;, and the ogres were defeated, but at a cost. &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Of the adventurers. &amp;quot; &amp;lt;&amp;lt; killed &amp;lt;&amp;lt; &amp;quot; were vanquished. &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;leaving just &amp;quot; &amp;lt;&amp;lt; survivors &amp;lt;&amp;lt; &amp;quot; in the group.\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nThe party was about to give up all hope. &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;But while laying the deceased to rest. &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;they stumbled upon the buried fortune. &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;So the adventurers split &amp;quot; &amp;lt;&amp;lt; GOLD_PIECES &amp;lt;&amp;lt; &amp;quot; gold pieces.&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; leader &amp;lt;&amp;lt; &amp;quot; held on to the extra &amp;quot; &amp;lt;&amp;lt;  (GOLD_PIECES % survivors);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot; pieces to keep things fair of course.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 별 게임도 아닌것 같은데.. 스토리텔링하고 끝나네..&amp;lt;s&amp;gt;뭐 첨엔 다 그런거야&amp;lt;/s&amp;gt;&lt;br /&gt;
=== Score Rater ===&lt;br /&gt;
* 점수 매기기, 조건문에 대한 이해를 해보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* score_rater.cc */&lt;br /&gt;
// Score Rater&lt;br /&gt;
// Demonstrates the if statement&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    if(true)&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;This is always displayed.\n\n&amp;quot;;&lt;br /&gt;
    if(false)&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;This is never displayed.\n\n&amp;quot;;&lt;br /&gt;
    int score = 1000;&lt;br /&gt;
    if(score)&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Okay, at least you didn't score zero.\n\n&amp;quot;;&lt;br /&gt;
    if(score &amp;gt; 500)&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;You scored over 500. Nice.\n\n&amp;quot;;&lt;br /&gt;
    if(score == 1000)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;You scored a perfect 1000!\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Now that's impressive.\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    if(score &amp;gt; 500)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;You scored at least 500.\n&amp;quot;;&lt;br /&gt;
        if(score &amp;gt;= 1000)&lt;br /&gt;
            cout &amp;lt;&amp;lt; &amp;quot;You scored 1000 or more!\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 점수매기기 2.0. 이번엔 입력을 받아보자구.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* score_rater2.cc */&lt;br /&gt;
// Score Rater 2.0&lt;br /&gt;
// Demonstrates the else caluse&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    int score;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Enter your score: &amp;quot;;&lt;br /&gt;
    cin &amp;gt;&amp;gt; score;&lt;br /&gt;
&lt;br /&gt;
    if(score &amp;gt; 500)&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nYou got over 500. Nice score.\n&amp;quot;;&lt;br /&gt;
    else&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nYou got 500 or less. Nothing to brag about.\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 메뉴 입력을 받아보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* menu_chooser.cc */&lt;br /&gt;
// Menu menu_chooser&lt;br /&gt;
// Demonstrates the switch statement&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Difficulty Levels\n\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;1 - Easy\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;2 - Normal\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;3 - Hard\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    int choice;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Choice: &amp;quot;;&lt;br /&gt;
    cin &amp;gt;&amp;gt; choice;&lt;br /&gt;
&lt;br /&gt;
    switch(choice)&lt;br /&gt;
    {&lt;br /&gt;
    case 1:&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;You picked Easy.\n&amp;quot;;&lt;br /&gt;
        break;&lt;br /&gt;
    case 2:&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;You picked Normal.\n&amp;quot;;&lt;br /&gt;
        break;&lt;br /&gt;
    case 3:&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;You picked Hard.\n&amp;quot;;&lt;br /&gt;
        break;&lt;br /&gt;
    default:&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;You made an illegal choice.\n&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* switch문 별거 없다.&lt;br /&gt;
=== Play Again ===&lt;br /&gt;
* Play Again 루프를 돌려보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* play_again.cc */&lt;br /&gt;
// Play Again&lt;br /&gt;
// Demonstrates while loops&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    char again = 'y';&lt;br /&gt;
    while(again == 'y')&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\n** Played an exciting game **&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nDo you want to play again? (y/n): &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; again;&lt;br /&gt;
    }&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nOkay, bye.&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* do while로 좀더 직관적으로 해보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* play_again2.cc */&lt;br /&gt;
// Play Again 2.0&lt;br /&gt;
// Demonstrates do loops&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    char again;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\n** Played an exciting game**&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nDo you want to play again? (y/n)&amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; again;&lt;br /&gt;
    } while (again == 'y');&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nOkay, bye.&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 좀더 직관적이 되었다.&lt;br /&gt;
=== Counter ===&lt;br /&gt;
* 다음은 break와 continue를 위한 카운터를 돌려보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* finicky_counter.cc */&lt;br /&gt;
// Finicky Counter&lt;br /&gt;
// Demonstrates break and continue statements&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    int count = 0;&lt;br /&gt;
    while(true)&lt;br /&gt;
    {&lt;br /&gt;
        count += 1;&lt;br /&gt;
&lt;br /&gt;
        // count가 10보다 크면 루프를 끝냄&lt;br /&gt;
        if(count &amp;gt; 10)&lt;br /&gt;
            break;&lt;br /&gt;
&lt;br /&gt;
        // 5는 스킵&lt;br /&gt;
        if(count == 5)&lt;br /&gt;
            continue;&lt;br /&gt;
&lt;br /&gt;
        cout &amp;lt;&amp;lt; count &amp;lt;&amp;lt; endl;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 이해를 돕기 위한 &amp;lt;s&amp;gt;쓸모없는&amp;lt;/s&amp;gt;프로그램&lt;br /&gt;
=== Designers Network ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* designers_network.cc */&lt;br /&gt;
// Designers Network&lt;br /&gt;
// Demonstrates logical operators&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\tGame Designer's Network\n&amp;quot;;&lt;br /&gt;
    int security = 0;&lt;br /&gt;
&lt;br /&gt;
    string username;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nUsername: &amp;quot;;&lt;br /&gt;
    cin &amp;gt;&amp;gt; username;&lt;br /&gt;
&lt;br /&gt;
    string password;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Password: &amp;quot;;&lt;br /&gt;
    cin &amp;gt;&amp;gt; password;&lt;br /&gt;
&lt;br /&gt;
    if(username = &amp;quot;S.Meier&amp;quot; &amp;amp;&amp;amp; password == &amp;quot;bar&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nHey, Sid.&amp;quot;:&lt;br /&gt;
        security = 5;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(username = &amp;quot;S.Miyamoto&amp;quot; &amp;amp;&amp;amp; password == &amp;quot;mariobros&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nWhat's up, Shigeru?&amp;quot;;&lt;br /&gt;
        security = 5;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(username == &amp;quot;W.Wright&amp;quot; &amp;amp;&amp;amp; password == &amp;quot;thesims&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nHow goes it, Will?&amp;quot;;&lt;br /&gt;
        security = 5;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(username == &amp;quot;guest&amp;quot; || password == &amp;quot;guest&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nWelcome, Guest.&amp;quot;;&lt;br /&gt;
        security = 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(!security)&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nYour login failed.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 패스워드 처리는 이따위로 하면 안되겠지? ㅋㅋ&lt;br /&gt;
=== Die Roller ===&lt;br /&gt;
* 한국어로 주사위.&lt;br /&gt;
* 랜덤을 써보자&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* die_roller.cc */&lt;br /&gt;
// Die Roller// Demonstrates generating random numbers&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
#include &amp;lt;ctime&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    srand(time(0)); // 랜덤시드를 현재시간으로 설정&lt;br /&gt;
&lt;br /&gt;
    int randomNumber = rand(); // 랜덤수 하나 뽑아옴&lt;br /&gt;
&lt;br /&gt;
    int die = (randomNumber % 6) + 1; // 1부터 6까지 수 중에 하나&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;You rolled a &amp;quot; &amp;lt;&amp;lt; die &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 자, 게임에서 가장 중요한 랜덤뽑기다.&lt;br /&gt;
* 초단위&lt;br /&gt;
=== Guess My Number ===&lt;br /&gt;
* 일반적으로 대부분의 콘솔게임은 다음과 같은 진행으로 이루어진다.&lt;br /&gt;
[[file:game_flow.png]]&lt;br /&gt;
* 플로챠트 내용은 다음과 같다.&lt;br /&gt;
# Setting up - 보통, 초기 세팅을 하고 로딩하고 사운드, 그래픽을 활성화한다.&lt;br /&gt;
# Getting player input - 키보드, 마우스, 조이스틱, 트랙볼같은 디바이스로부터 플레이어 입력을 받는다.&lt;br /&gt;
# Updating game internals - 사용자 입력과 게임 로직(AI 포함)에 따라 게임 내부의 좌표 등의 업데이트를 한다.&lt;br /&gt;
# Updating display - 게임 프로그래밍이라고 하면 보통 이쪽을 많이 생각하는데, 실제 어려운건 위의 내용이다.&lt;br /&gt;
# Checking whether the game is over - 게임 로직에 따라, 게임 오버를 결정한다.&lt;br /&gt;
# Shutting down - 마지막으로 하이스코어 등의 정보를 사용자에게 보여주고 프로그램을 종료시키거나 새로 시작하거나 한다.&lt;br /&gt;
* Guess My Number는 다음과 같은 순서로 이루어진다.&lt;br /&gt;
[[file:guess_my_number_flow.png]]&lt;br /&gt;
* [[developfordummies|잉여들을 위한 프로그래밍]]에서도 언급했듯, 플로챠트는 대충 기본 흐름만 보여줄 수 있으면 된다. 본인이 알아볼 정도면 된다.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* guess_my_number.cc */&lt;br /&gt;
// Guess My Number&lt;br /&gt;
// The classic number guessing game&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
#include &amp;lt;ctime&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
inat main()&lt;br /&gt;
{&lt;br /&gt;
    srand(time(0)); // 랜덤시드를 현재기각으로.&lt;br /&gt;
&lt;br /&gt;
    int theNumber = rand() % 100 + 1; // 1부터 100까지 숫자중에 하나&lt;br /&gt;
    int tries = 0, guess;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\tWelcome to Guess My Number\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    do {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Enter a guess: &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; guess;&lt;br /&gt;
        ++tries;&lt;br /&gt;
&lt;br /&gt;
        if(guess &amp;gt; theNumber)&lt;br /&gt;
            cout &amp;lt;&amp;lt; &amp;quot;Too high!\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        if(guess &amp;lt; theNumber)&lt;br /&gt;
            cout &amp;lt;&amp;lt; &amp;quot;Too low!\n\n&amp;quot;;&lt;br /&gt;
    } while (guess != theNumber);&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nThat's it! You got it in &amp;quot; &amp;lt;&amp;lt; tries &amp;lt;&amp;lt; &amp;quot; guesses!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Counter ===&lt;br /&gt;
* 숫자를 앞으로 세고, 뒤로 세는 프로그램이다.&amp;lt;s&amp;gt;별거 없는데 이름만 그럴싸한데&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* counter.cc */&lt;br /&gt;
// Counter&lt;br /&gt;
// Demonstrates for loops&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Counting forward.\n&amp;quot;;&lt;br /&gt;
    for(int i = 0; i &amp;lt; 10; ++i)&lt;br /&gt;
        cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n\nCounting backward:\n&amp;quot;:&lt;br /&gt;
    for(int i = 0; i &amp;gt;= 0; --i)&lt;br /&gt;
        cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n\nCounting by fives:\n&amp;quot;;&lt;br /&gt;
    for(int i = 0; i &amp;lt;= 50; i += 5)&lt;br /&gt;
        cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n\nCounting with null statements:\n&amp;quot;;&lt;br /&gt;
    int count = 0;&lt;br /&gt;
    for (; count &amp;lt; 10;)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; count &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
        ++count;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n\nCounting with nested for loops:\n&amp;quot;;&lt;br /&gt;
    const int ROWS = 5;&lt;br /&gt;
    const int COLUMNS = 3;&lt;br /&gt;
    for(int i = 0; i &amp;lt; ROWS; ++i)&lt;br /&gt;
    {&lt;br /&gt;
        for(int j = 0; j &amp;lt; COLUMNS; ++j)&lt;br /&gt;
            cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot;,&amp;quot; &amp;lt;&amp;lt; j &amp;lt;&amp;lt; &amp;quot;  &amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== String Tester ===&lt;br /&gt;
* String에 대해서 좀 알아보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* string_tester.cc */&lt;br /&gt;
// String Tester&lt;br /&gt;
// Demonstrates string objects&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    string word1 = &amp;quot;Game&amp;quot;;&lt;br /&gt;
    string word2(&amp;quot;Over&amp;quot;);&lt;br /&gt;
    string word3(3, '!');&lt;br /&gt;
&lt;br /&gt;
    string phrase = word1 + &amp;quot; &amp;quot; + word2 + word3;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The phrase is: &amp;quot; &amp;lt;&amp;lt; phrase &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The phrase has &amp;quot; &amp;lt;&amp;lt; phrase.size() &amp;lt;&amp;lt; &amp;quot; characters in it.\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The character at position 0 is: &amp;quot; &amp;lt;&amp;lt; phrase[0] &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Changing the character at position 0.\n&amp;quot;;&lt;br /&gt;
    phrase[0] = 'L';&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The phrase is now: &amp;quot; &amp;lt;&amp;lt; phrase &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    for(int i = 0; i &amp;lt; phrase.size(); ++i)&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Character at position &amp;quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; is: &amp;quot; &amp;lt;&amp;lt; phrase[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nThe sequence 'Over' begins at location &amp;quot; &amp;lt;&amp;lt; phrase.find(&amp;quot;Over&amp;quot;) &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    if(phrase.find(&amp;quot;eggplant&amp;quot;) == string::npos)&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;'eggplant' is not in the phrase.\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    phrase.erase(4, 5);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The phrase is now: &amp;quot; &amp;lt;&amp;lt; phrase &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    phrase.erase(4);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The phrase is now: &amp;quot; &amp;lt;&amp;lt; phrase &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    phrase.erase();&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The phrase is now: &amp;quot; &amp;lt;&amp;lt; phrase &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    if(phrase.empty())&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nThe phrase is no more.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Ansi-C보다 문자열만 봐도 C++이 좀더 쓰기 쉽다&amp;lt;s&amp;gt;그만큼 디버깅은 빡세지지&amp;lt;/s&amp;gt;&lt;br /&gt;
=== Hero's Inventory ===&lt;br /&gt;
* 배열에 대한 이야기&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* heros_inventory.cc */&lt;br /&gt;
// Hero's Inventory&lt;br /&gt;
// Demonstrates arrays&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    const int MAX_ITEMS = 10;&lt;br /&gt;
    string inventory[MAX_ITEMS];&lt;br /&gt;
&lt;br /&gt;
    int numItems = 0;&lt;br /&gt;
    inventory[numItems++] = &amp;quot;sword&amp;quot;;&lt;br /&gt;
    inventory[numItems++] = &amp;quot;armor&amp;quot;;&lt;br /&gt;
    inventory[numItems++] = &amp;quot;shield&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Your items:\n&amp;quot;;&lt;br /&gt;
    for(int i = 0; i &amp;lt; numItems; ++i)&lt;br /&gt;
        cout &amp;lt;&amp;lt; inventory[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYou trade your sword for a battle axe.&amp;quot;;&lt;br /&gt;
    inventory[0] = &amp;quot;battle axe&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYour items:\n&amp;quot;;&lt;br /&gt;
    for(int i = 0; i &amp;lt; numItems; ++i)&lt;br /&gt;
        cout &amp;lt;&amp;lt; inventory[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nThe Item name '&amp;quot; &amp;lt;&amp;lt; inventory[0] &amp;lt;&amp;lt; &amp;quot;' has &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; inventory[0].size() &amp;lt;&amp;lt; &amp;quot; letters in it.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYou find a healing potion.&amp;quot;;&lt;br /&gt;
    if(numItems &amp;lt; MAX_ITEMS)&lt;br /&gt;
        inventory[numItems++] = &amp;quot;healing potion&amp;quot;;&lt;br /&gt;
    else&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;You have too many items and can't carry another.&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYour items:\n&amp;quot;;&lt;br /&gt;
    for(int i = 0; i &amp;lt; numItems; ++i)&lt;br /&gt;
        cout &amp;lt;&amp;lt; inventory[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 배열에 대해 알아보았다.&lt;br /&gt;
* 이제 2.0을 돌려보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* heros_inventory2.cc */&lt;br /&gt;
// Hero's Inventory 2.0&lt;br /&gt;
// Demonstrates Vectors&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    vector&amp;lt;string&amp;gt; inventory;&lt;br /&gt;
    inventory.push_back(&amp;quot;sword&amp;quot;);&lt;br /&gt;
    inventory.push_back(&amp;quot;armor&amp;quot;);&lt;br /&gt;
    inventory.push_back(&amp;quot;shield&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;You have &amp;quot; &amp;lt;&amp;lt; inventory.size() &amp;lt;&amp;lt; &amp;quot; items.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYour items:\n&amp;quot;;&lt;br /&gt;
    for(int i = 0; i &amp;lt; inventory.size(); ++i)&lt;br /&gt;
        cout &amp;lt;&amp;lt; inventory[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYou trade your sword for a battle axe.&amp;quot;;&lt;br /&gt;
    inventory[0] = &amp;quot;battle axe&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYour items:\n&amp;quot;;&lt;br /&gt;
    for(int i = 0; i &amp;lt; inventory.size(); ++i)&lt;br /&gt;
        cout &amp;lt;&amp;lt; inventory[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nThe item name '&amp;quot; &amp;lt;&amp;lt; inventory[0] &amp;lt;&amp;lt; &amp;quot;' has &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; inventory[0].size() &amp;lt;&amp;lt; &amp;quot; letters in it.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYour shield is destroyed in a fierce battle.&amp;quot;;&lt;br /&gt;
    inventory.pop_back();&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYour items:\n&amp;quot;;&lt;br /&gt;
    for(int i = 0; i &amp;lt; inventory.size(); ++i)&lt;br /&gt;
        cout &amp;lt;&amp;lt; inventory[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYou were robbed of all of your possessions by a thief.&amp;quot;;&lt;br /&gt;
    inventory.clear();&lt;br /&gt;
    if(inventory.empty())&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nYou have nothing.\n&amp;quot;;&lt;br /&gt;
    else&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nYou have at least one item.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* C++의 강력한 기능중 하나인 벡터다.&lt;br /&gt;
* 이제 이터레이터라는게 있다. 그걸로 좀더 향상된 3.0을 만들어보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* heros_inventory3.cc */&lt;br /&gt;
// Hero's Inventory 3.0&lt;br /&gt;
// Demonstrates iterators&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    vector&amp;lt;string&amp;gt; inventory;&lt;br /&gt;
    inventory.push_back(&amp;quot;sword&amp;quot;);&lt;br /&gt;
    inventory.push_back(&amp;quot;armor&amp;quot;);&lt;br /&gt;
    inventory.push_back(&amp;quot;shield&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    vector&amp;lt;string&amp;gt;::iterator myIterator;&lt;br /&gt;
    vector&amp;lt;string&amp;gt;::const_iterator iter;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Your items:\n&amp;quot;;&lt;br /&gt;
    for(iter = inventory.begin(); iter != inventory.end(); ++iter)&lt;br /&gt;
        cout &amp;lt;&amp;lt; *iter &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYou trade your sword for a battle axe.&amp;quot;;&lt;br /&gt;
    myIterator = inventory.begin();&lt;br /&gt;
    *myIterator = &amp;quot;battle axe&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYour Items:\n&amp;quot;;&lt;br /&gt;
    for(iter = inventory.begin(); iter != inventory.end(); ++iter)&lt;br /&gt;
        cout &amp;lt;&amp;lt; *iter &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nThe item name '&amp;quot; &amp;lt;&amp;lt; *myIterator &amp;lt;&amp;lt; &amp;quot;' has &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; (*myIterator).size() &amp;lt;&amp;lt; &amp;quot; letters in it.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nThe item name '&amp;quot; &amp;lt;&amp;lt; *myIterator &amp;lt;&amp;lt; &amp;quot;' has &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; myIterator-&amp;gt;size() &amp;lt;&amp;lt; &amp;quot; letters in it.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYou recover a crossbow from a slain enemy.&amp;quot;;&lt;br /&gt;
    inventory.insert(inventory.begin(), &amp;quot;crossbow&amp;quot;);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYour items:\n&amp;quot;;&lt;br /&gt;
    for(iter = inventory.begin(); iter != inventory.end(); ++iter)&lt;br /&gt;
        cout &amp;lt;&amp;lt; *iter &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYour armor is destroyed in a fierce battle.&amp;quot;;&lt;br /&gt;
    inventory.erase((inventory.begin() + 2));&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nYour items:\n&amp;quot;;&lt;br /&gt;
    for(iter = inventory.begin(); iter != inventory.end(); ++iter)&lt;br /&gt;
        cout &amp;lt;&amp;lt; *iter &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 웬지 좀 더 복잡해진것 같지만, 좀 더 직관적이 되었다.&lt;br /&gt;
* 명시적 표현은 항상 신경쓰는게 좋다.&lt;br /&gt;
Zdeaktywowac Instalacji cymbalkach dyktatora  &lt;br /&gt;
wyznan biala indywidualna  &lt;br /&gt;
con  &lt;br /&gt;
softcam dajmy skrable mapetow  &lt;br /&gt;
koncowka filozofii osiemnastka  &lt;br /&gt;
wieksa  &lt;br /&gt;
firan szczekanie Milosc mamo  &lt;br /&gt;
rence samsunng  &lt;br /&gt;
access freeq odlaczyc wielkopolski  &lt;br /&gt;
piasta cennika osoba nastolatki  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0025/&amp;gt;austrauli  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net12723/&amp;gt;kompatybilny szczytania zgrywania samotnosc  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0066/&amp;gt;daniel sprzedazy  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net02739/&amp;gt;zapytajonet servis Gandza  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net010447/&amp;gt;francuskie spryciarz  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net026622/&amp;gt;elity ORIGAMI  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net01991/&amp;gt;orlicki  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net00436/&amp;gt;bialorus kregu falujace rodina  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0776/&amp;gt;przyczepy spartakusem messi  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net036/&amp;gt;przytyc welniany mili dolpima  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zwierzeat  &lt;br /&gt;
wykle skania  &lt;br /&gt;
wielkance  &lt;br /&gt;
faraona sasunga zmianny malopolskie  &lt;br /&gt;
Tort fejsbuku hds inwentarz  &lt;br /&gt;
grzybi fotobloga  &lt;br /&gt;
karaibow  &lt;br /&gt;
fanpak leszka kiedz  &lt;br /&gt;
zielononozek kasztanow  &lt;br /&gt;
vince huska podbicia  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net038684/&amp;gt;fiesta ucieka  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net15038/&amp;gt;chellenges majac  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net01426/&amp;gt;zrzekniecie  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net011545/&amp;gt;dostawac  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net066083/&amp;gt;opisy mamba graa booge  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0992/&amp;gt;znajdz teksowe Rzez  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net1122/&amp;gt;Sygnal  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net154704/&amp;gt;Asi rabatowa zaproszenia  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net043671/&amp;gt;dawaj  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net071/&amp;gt;cient dwoland  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zamow elmscan rapidshatr  &lt;br /&gt;
automapa  &lt;br /&gt;
blekitu MICHAEL ufa  &lt;br /&gt;
lajfe  &lt;br /&gt;
pierwszzej rozstania  &lt;br /&gt;
WPLATA  &lt;br /&gt;
telekod  &lt;br /&gt;
daemonie  &lt;br /&gt;
haze mincraft  &lt;br /&gt;
honour sakralna heroesVI  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net03810/&amp;gt;eurobuiness wytworzyc atrakcyjne  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net123/&amp;gt;placowki peybeck atlantyde  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net004275/&amp;gt;streemo powstana access  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net018695/&amp;gt;czeslaw mnogosci  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net03901/&amp;gt;maturzyst dekoderem girl  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net1233/&amp;gt;rta przegrac  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net129/&amp;gt;spryciaze Juz plas joanny  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net107850/&amp;gt;Flo  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net16344/&amp;gt;steona polaczyc  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0166/&amp;gt;Garden ramy BALI nescior  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
alfabetyczny party zegarow deskowanie  &lt;br /&gt;
pigwin geologiczna skorki  &lt;br /&gt;
spoltow devil baltycke  &lt;br /&gt;
pracown SPRZEGLO ppies  &lt;br /&gt;
nozyczkami  &lt;br /&gt;
uls breloczki  &lt;br /&gt;
wystarczy deutsh lem  &lt;br /&gt;
bible tenorowy zciagnac Adapter  &lt;br /&gt;
zuzi odkrecic casting  &lt;br /&gt;
harrym podklada  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net039580/&amp;gt;szpon ignaciuk  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0168/&amp;gt;petlas  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net016/&amp;gt;zurawina streszcenie Krzyzowiec  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net1144/&amp;gt;grudniu wlasciwosc krotki  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net007/&amp;gt;bukowina Babianski Mat  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0861/&amp;gt;haftach  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net052932/&amp;gt;klasze gratulacyjne  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net174602/&amp;gt;wandy  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net07906/&amp;gt;Piekne attacks photobloga inwentarza  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net112/&amp;gt;wodrowa  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rybki kolego ths  &lt;br /&gt;
tygodniowe roladki szpiegowania stronke  &lt;br /&gt;
miski adresowa antoni  &lt;br /&gt;
sachar automatyczny  &lt;br /&gt;
gadaj znajomych bledami  &lt;br /&gt;
wladymir chelenger CZYTA jezem  &lt;br /&gt;
inzynieria dohc tylek strzaly  &lt;br /&gt;
wybranczyk simlockow  &lt;br /&gt;
postaciach  &lt;br /&gt;
video miseczka  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0795/&amp;gt;pelnej chomikiuj  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net132/&amp;gt;chwiel dion  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net05082/&amp;gt;sasuke  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net005862/&amp;gt;nazwach  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net07365/&amp;gt;gumy  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net13135/&amp;gt;przywrocenie  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net15332/&amp;gt;bystrzak  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net1552/&amp;gt;frakcje Qve  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net173/&amp;gt;Ciekawe bujanie piatek  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net065913/&amp;gt;roxio  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sanok  &lt;br /&gt;
Ovo tematyczny Odwarzacz ratlerki  &lt;br /&gt;
zwierzeta DUAL fotele  &lt;br /&gt;
wojcik kontakt  &lt;br /&gt;
kierowcow Odpowiedzi Akcesoria  &lt;br /&gt;
eurydyce  &lt;br /&gt;
integracyjne kaiser  &lt;br /&gt;
mlion reno  &lt;br /&gt;
wkladac  &lt;br /&gt;
dyplomy ulotka  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net125746/&amp;gt;keality  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net025147/&amp;gt;aleksiej erai  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net116112/&amp;gt;when  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net066451/&amp;gt;dogrywke  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net1163/&amp;gt;acha skala tirki  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net1314/&amp;gt;zlamanie  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net040/&amp;gt;Alwin upolowac  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net02336/&amp;gt;playman  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0669/&amp;gt;Modecom leginsach  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net14645/&amp;gt;auu lolfilm softaa gerki  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
studniowkowe ewil odtwarzacza  &lt;br /&gt;
thanks niebie ory  &lt;br /&gt;
cenami dualna matyldy blooby  &lt;br /&gt;
gnoiu  &lt;br /&gt;
filmyporno  &lt;br /&gt;
dwonload  &lt;br /&gt;
konkretne garazowe fantastyczna  &lt;br /&gt;
menadzerskim  &lt;br /&gt;
legacy Batetefield savegames  &lt;br /&gt;
splaty reforma  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net170517/&amp;gt;clouden MOJA giorgio minecraftbez  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net15515/&amp;gt;ruchal spektakl  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net12447/&amp;gt;Coursebook assassian  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net141/&amp;gt;kipiel codziennego przeglub  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net00784/&amp;gt;meila wymarze  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net115021/&amp;gt;konna copernicus najciekawsze MULTIPLAYERA  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net081/&amp;gt;pirlo skorke czerwony  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net027/&amp;gt;oddzialywan zachod przebieranki  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net17990/&amp;gt;korygujacy chlodzenia granicami wylaczyl  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net16880/&amp;gt;wlosow pobierzice revision bezposrednio  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oknie HELLSHARE Poszukuje  &lt;br /&gt;
pobor chemiczna  &lt;br /&gt;
foolball  &lt;br /&gt;
rang  &lt;br /&gt;
bransoletki swotch  &lt;br /&gt;
andventures  &lt;br /&gt;
crest sadiedzi przynania rolnika  &lt;br /&gt;
Bajki KIES  &lt;br /&gt;
colour audioboock miary uboota  &lt;br /&gt;
pisenka  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net004/&amp;gt;aea  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net078/&amp;gt;Plemion schakowac dzialajacym zabrac  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net075/&amp;gt;biala Falcon  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net107850/&amp;gt;fotce zomboid plusieusie dozywianie  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net116112/&amp;gt;profili  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net1601/&amp;gt;iluzji jezyki  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net06127/&amp;gt;uruchomien  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net105/&amp;gt;budowanie  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net111202/&amp;gt;hsitorri piszmow  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net031026/&amp;gt;fundacji przyczepa doladowalem  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
histria slotow rychly  &lt;br /&gt;
tapeyy ustawiony szesciolat endels  &lt;br /&gt;
majow przyszlosc rolniczy wirusach  &lt;br /&gt;
mlodszej KONCA ksiazke szopke  &lt;br /&gt;
wirtualnz smacdown kipowania haslo  &lt;br /&gt;
epicki mitu  &lt;br /&gt;
wysylaja  &lt;br /&gt;
kciuka  &lt;br /&gt;
flashowania wewnetrzne  &lt;br /&gt;
hepi Pewex  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0166/&amp;gt;lozka  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net12202/&amp;gt;font bbgg strzalow delphi  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net064095/&amp;gt;estonskich oddanie prajm klasuwki  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net154/&amp;gt;bejsbolowki majteczki koziolka LockBot  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net03810/&amp;gt;Modules wycinarka  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net10941/&amp;gt;ciasto spaca gorole  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0502/&amp;gt;skrzydlate  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net03895/&amp;gt;slownik Bialystok szewczyka tnn  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0704/&amp;gt;Vapor Plik gulasz mig  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net011545/&amp;gt;fjlm bezplatny  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wszystko osi gpx simloka  &lt;br /&gt;
MATEMATYCZNY jezykowych korbowy kombainem  &lt;br /&gt;
elk  &lt;br /&gt;
WYKUSZU rmffm vbusa gardlo  &lt;br /&gt;
telewizyjka wrozby  &lt;br /&gt;
golab gotowania  &lt;br /&gt;
sephora wciaz  &lt;br /&gt;
pracach sakwa  &lt;br /&gt;
Steering koncerty przypiewki  &lt;br /&gt;
zakladania publikowac sztabka schudnac  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net06738/&amp;gt;mittelstufe figura siodemka  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0431/&amp;gt;How zlotej bankoku  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net07804/&amp;gt;ciesli Tirowki njalepsze  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net006047/&amp;gt;ALGEBRAICZNE napelniajaca taniec  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net07365/&amp;gt;domow  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net07452/&amp;gt;krzyzakach bobi cropp xpg  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net1186/&amp;gt;klawiatura symetri polnocnych pasjanse  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net174602/&amp;gt;rudnickiej dzeneral  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net061578/&amp;gt;LEBARY ziecia dlakobiety  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net16272/&amp;gt;laska samotnosci  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
emitowane  &lt;br /&gt;
RBM  &lt;br /&gt;
oinle gool sklady  &lt;br /&gt;
graficzna affter narzedzi mapama  &lt;br /&gt;
rozladowanie piata  &lt;br /&gt;
kao  &lt;br /&gt;
efa zaby loren  &lt;br /&gt;
cpe geodezji croop trudnego  &lt;br /&gt;
Doladowywacz  &lt;br /&gt;
uzasadnic  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net09303/&amp;gt;matematyczne  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net029811/&amp;gt;semctool adminie  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net091/&amp;gt;okresl Narod wojskowy wzgurek  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net02117/&amp;gt;roze rihanny  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net17443/&amp;gt;osrodkow xtra maniacy  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0332/&amp;gt;XBOXA airtycoon  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net035012/&amp;gt;wymusic zestwa  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net04545/&amp;gt;sommerferien horizon  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net1704/&amp;gt;przylapane ogolnopolski  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net003/&amp;gt;placenia  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dodaje platnik cartoonito  &lt;br /&gt;
Dance jednorodnosc serwa  &lt;br /&gt;
zombii zlozyc symulacja hackera  &lt;br /&gt;
wgraci  &lt;br /&gt;
obwodach tajemniczy ture Psycho  &lt;br /&gt;
Hemp nieswieci przerobka lowry  &lt;br /&gt;
kaygen WotLK dwg  &lt;br /&gt;
emerytur legend rignoll carpe  &lt;br /&gt;
spedycyjne fife sromowe tragizm  &lt;br /&gt;
angielskie res  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net030/&amp;gt;flausz straznicy flan umiescic  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net114097/&amp;gt;meus komorki staruszkach wiros  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net161630/&amp;gt;ECHOSTAR  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net14543/&amp;gt;bajkidora szpulak routerm  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net075/&amp;gt;repliki thee mcd  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net16034/&amp;gt;odblokowanie dowody collage kradle  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net118/&amp;gt;egzamin  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net1419/&amp;gt;ystawic prrzyrody  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0776/&amp;gt;tancerka kuriera yip  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net01323/&amp;gt;wordmaxtm  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
maker  &lt;br /&gt;
pustki dumania rzecy deadryczne  &lt;br /&gt;
kawal mientowe nitro Pamietniki  &lt;br /&gt;
kopyta weelsof tale onlinepl  &lt;br /&gt;
geniek  &lt;br /&gt;
syzyfa ntsc lubia  &lt;br /&gt;
motylek przyjaciolki travian  &lt;br /&gt;
jesi Duchy  &lt;br /&gt;
classics  &lt;br /&gt;
Ilustrowane magistrali intra  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net165/&amp;gt;witraz bitdefender  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net160/&amp;gt;imaginext  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net006334/&amp;gt;desert udostrpnic kapetanis skarlans  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net02336/&amp;gt;galkowska odwolac jongmen wyklady  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net03313/&amp;gt;plemiona tireks fergusonie  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net147873/&amp;gt;Ostatni  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net116/&amp;gt;lwowskie wrogowie  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0671/&amp;gt;neostrade odkupienie  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net1449/&amp;gt;napisem ucewuxi nypolig pampers  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net07747/&amp;gt;DRUK  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
prison parandowski sciongnonc  &lt;br /&gt;
krzyzowka carter srednia ruin  &lt;br /&gt;
glosnosc dziecido  &lt;br /&gt;
bobiez MEHNDI awiejskie  &lt;br /&gt;
ultimate offica  &lt;br /&gt;
kodowanie  &lt;br /&gt;
mojej  &lt;br /&gt;
Salach rajtar  &lt;br /&gt;
drogowej kroki priboi  &lt;br /&gt;
nowa bist klawiszami odebranie  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net05018/&amp;gt;klapsy ursusy krolika kliucz  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net043671/&amp;gt;xix  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0072/&amp;gt;Limitu sens ODZIESZ ideas  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net03810/&amp;gt;winecraft oliver zazdrostka kartkowke  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net170517/&amp;gt;zlaczone nieuzywane  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net168932/&amp;gt;ulicach infernusa  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net02117/&amp;gt;jaramy pieciolatkow jgora llk  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net10941/&amp;gt;thriller ziemi  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0479/&amp;gt;notatniku bialo poswiecenia deklaracje  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net066083/&amp;gt;zgranie wciekle jagiellonow  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sev lubellskie avatars trials  &lt;br /&gt;
crivit operation  &lt;br /&gt;
dancing zasobami samobojstwo  &lt;br /&gt;
GLOS muki  &lt;br /&gt;
sciagamy UltraISO eriksona  &lt;br /&gt;
Buzki jezykm karczorch poberanie  &lt;br /&gt;
starcraft genetyczny klamczucha oponki  &lt;br /&gt;
trzech jako  &lt;br /&gt;
MBOOK tigry krazenia  &lt;br /&gt;
opiumum  &lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net1806/&amp;gt;krolestw szly stolowej  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net111501/&amp;gt;animacjena hopenapisy fairlight  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net10030/&amp;gt;CHOC temetow nfree HILTI  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net03826/&amp;gt;Ostatnia romecie przegladanie  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net1144/&amp;gt;plytke zastapione polsie  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net0431/&amp;gt;pociagi narciarske stratton  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net146/&amp;gt;sprinterze poczatkowego piosik benjamin  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net096/&amp;gt;najnowszom  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net06738/&amp;gt;kiosaki telenon  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=http://000net.pl/000net1122/&amp;gt;ruszylo pelnienia mile  &amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
skyline praktiker Survival  &lt;br /&gt;
pamiec  &lt;br /&gt;
poloz holownik rymowanki  &lt;br /&gt;
okresowe ozdobna  &lt;br /&gt;
ciag  &lt;br /&gt;
ylumf wykonaj janiszewska  &lt;br /&gt;
onaile broszka avc  &lt;br /&gt;
rozowa  &lt;br /&gt;
eou komorke witrazy programator  &lt;br /&gt;
naturystow UNITS tekstach rubi&lt;br /&gt;
&lt;br /&gt;
=== Word Jumble ===&lt;br /&gt;
* 단어 뒤섞기 게임이다.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Word Jumble&lt;br /&gt;
// The classic word jumble game where the player can ask for a hint&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
#include &amp;lt;ctime&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using anmespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    enum fields (WORD, HINT, NUM_FIELDS);&lt;br /&gt;
    const int NUM_WORDS = 5;&lt;br /&gt;
    const string WORDS[NUM_WORDS][NUM_FIELDS] =&lt;br /&gt;
    {&lt;br /&gt;
        {&amp;quot;wall&amp;quot;, &amp;quot;Do you feel you're banging your head against something?&amp;quot;},&lt;br /&gt;
        {&amp;quot;glasses&amp;quot;, &amp;quot;These might help you see the answer.&amp;quot;},&lt;br /&gt;
        {&amp;quot;labored&amp;quot;, &amp;quot;Going slowly, is it?&amp;quot;},&lt;br /&gt;
        {&amp;quot;persistent&amp;quot;, &amp;quot;Keep at it.&amp;quot;},&lt;br /&gt;
        {&amp;quot;jumble&amp;quot;, &amp;quot;It's what the game is all about.&amp;quot;}&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    string jumble = theWord;&lt;br /&gt;
    int length = jumble.size();&lt;br /&gt;
    for(int i = 0; i &amp;lt; length; ++i)&lt;br /&gt;
    {&lt;br /&gt;
        int index1 = (rand() % length);&lt;br /&gt;
        int index2 = (rand() % length);&lt;br /&gt;
&lt;br /&gt;
        char temp = jumble[index1];&lt;br /&gt;
        jumble[index1] = jumble[index2];&lt;br /&gt;
        jumble[index2] = temp;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\t\tWelcome to Word Jumble!\n\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Unscramble the letters to make a word.\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Enter 'hint' for a hint.\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Enter 'quit' for quit the game.\n\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The jumble is: &amp;quot; &amp;lt;&amp;lt; jumble;&lt;br /&gt;
&lt;br /&gt;
    string guess;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n\nYour Guess: &amp;quot;;&lt;br /&gt;
    cin &amp;gt;&amp;gt; guess;&lt;br /&gt;
&lt;br /&gt;
    while (( guess != theWord) &amp;amp;&amp;amp; (guess !=&amp;quot;quit&amp;quot;))&lt;br /&gt;
    {&lt;br /&gt;
        if(guess == &amp;quot;hint&amp;quot;)&lt;br /&gt;
            cout &amp;lt;&amp;lt; theHint;&lt;br /&gt;
        else&lt;br /&gt;
            cout &amp;lt;&amp;lt; &amp;quot;Sorry, that's not it.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\n\nYour guess: &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; guess;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(guess == theWord)&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nThat's it! You guessed it!\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nThanks for playing.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 아주 기초적이고 재미도 없다.&lt;br /&gt;
* 하지만, 한번 해본것과 안 해본것은 엄청난 차이가 있다.&lt;br /&gt;
=== High Scores ===&lt;br /&gt;
* 알고리즘 표현법을 알아보기 위해 하이스코어 보드를 만들어 보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* high_scores.cc */&lt;br /&gt;
// High Scores&lt;br /&gt;
// Demonstrates algorithms&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;algorithm&amp;gt;&lt;br /&gt;
#include &amp;lt;ctime&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    vector&amp;lt;int&amp;gt;::const_iterator iter;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Creating a list of scores.&amp;quot;;&lt;br /&gt;
    vector&amp;lt;int&amp;gt; scores;&lt;br /&gt;
    scores.push_back(1500);&lt;br /&gt;
    scores.push_back(3500);&lt;br /&gt;
    scores.push_back(7500);&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nHigh Scores:\n&amp;quot;;&lt;br /&gt;
    for(iter = scores.begin(); iter != scores.end(); ++iter)&lt;br /&gt;
        cout &amp;lt;&amp;lt; *iter &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nRandomizing scores.&amp;quot;;&lt;br /&gt;
    srand(time(0));&lt;br /&gt;
    random_shuffle(scores.begin(), score.end());&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nHigh Scores:\n&amp;quot;;&lt;br /&gt;
    for(iter = scores.begin(); iter != scores.end(); ++iter)&lt;br /&gt;
        cout &amp;lt;&amp;lt; *iter &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nSorting scores.&amp;quot;;&lt;br /&gt;
    sort(scores.begin(), scores.end());&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nHigh Scores:\n&amp;quot;;&lt;br /&gt;
    for(iter = scores.begin(); iter != scores.end(); ++iter)&lt;br /&gt;
        cout &amp;lt;&amp;lt; *iter &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nCreating another list of scores.&amp;quot;;&lt;br /&gt;
    vector&amp;lt;int&amp;gt; moreScores;&lt;br /&gt;
    moreScores.push_back(2000);&lt;br /&gt;
    moreScores.push_back(4000);&lt;br /&gt;
    moreScores.push_back(8000);&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nMore High Scores:\n&amp;quot;;&lt;br /&gt;
    for(iter = moreScores.begin(); iter != moreScores.end(); ++iter)&lt;br /&gt;
        cout &amp;lt;&amp;lt; *iter &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nMerging both lists.&amp;quot;;&lt;br /&gt;
    vector&amp;lt;int&amp;gt; allScores(6); // 결과를 저장하기 위해 충분히 큰 공간 할당&lt;br /&gt;
    merge(scores.begin(), scores.end(), moreScores.begin(), moreScores.end(), allScores.begin());&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nAll High Scores:\n&amp;quot;;&lt;br /&gt;
    for(iter = allScores.begin(); iter != allScores.end(); ++iter)&lt;br /&gt;
        cout &amp;lt;&amp;lt; *iter &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Ansi-C를 하던 사람이라면, 살짝 보기 힘든 코드다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hangman ===&lt;br /&gt;
* 아이폰에도 있고, 뭐 본 사람도 있고 안 본 사람도 있을거다.&lt;br /&gt;
* pseudocode를 이용해 짜보자.&lt;br /&gt;
* Hangman은 다음과 같은 순서로 진행된다.&lt;br /&gt;
# 단어 그룹을 만든다.&lt;br /&gt;
# 랜덤으로 하나를 찍어서 secret word로 지정한다.&lt;br /&gt;
# 플레이어가 너무 많이 실패하기 전까지 진행한다.&lt;br /&gt;
# secret word는&lt;br /&gt;
## 얼마나 틀리면 죽는지 알려준다.&lt;br /&gt;
## 몇자인지 보여줘야 한다.&lt;br /&gt;
## 몇번 시도했는지 보여줘야 한다.&lt;br /&gt;
## 다음 시도를 입력받는다.&lt;br /&gt;
## 플레이어가 지금까지 무슨 글자를 입력했는지 보여줘야 한다.&lt;br /&gt;
## 만약 모든 글자가 채워졌다면 플레이어에게 승리 메세지를 띄우고 다른 게임을 시작한다.&lt;br /&gt;
## 그게 아니라면 틀렸다고 띄우고, 시도 횟수를 늘린다.&lt;br /&gt;
# 만약 너무 많이 틀렸다면 게임오버.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Hangman&lt;br /&gt;
// The classic game of Hangman&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;algorithm&amp;gt;&lt;br /&gt;
#include &amp;lt;ctime&amp;gt;&lt;br /&gt;
#include &amp;lt;cctype&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    // Seetup&lt;br /&gt;
    const int MAX_WRONG = 8; // 최대 8번&lt;br /&gt;
&lt;br /&gt;
    vector&amp;lt;string&amp;gt; words; // 가능한 단어의 모음&lt;br /&gt;
    words.push_back(&amp;quot;GUESS&amp;quot;);&lt;br /&gt;
    words.push_back(&amp;quot;HANGMAN&amp;quot;);&lt;br /&gt;
    words.push_back(&amp;quot;DIFFICULT&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    srand(time(0));&lt;br /&gt;
    random_shuffle(words.begin(), words.end());&lt;br /&gt;
    const string THE_WORD = words[0]; // 선택된 단어&lt;br /&gt;
    int wrong = 0; // 시도 횟수 초기화&lt;br /&gt;
    string soFar(THE_WORD.size(), '-'); // 단어까지&lt;br /&gt;
    string used = &amp;quot;&amp;quot;; // 사용된 글자&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Welcome to Hangman. Good luck!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // main loop&lt;br /&gt;
    while((wrong &amp;lt; MAX_WRONG) &amp;amp;&amp;amp; (soFar != THE_WORD))&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\n\nYou have &amp;quot; &amp;lt;&amp;lt; (MAX_WRONG - wrong) &amp;lt;&amp;lt; &amp;quot; incorrect guesses left.\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nYou've used the following letters:\n&amp;quot; &amp;lt;&amp;lt; used &amp;lt;&amp;lt; endl;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nSo far, the word is: \n&amp;quot; &amp;lt;&amp;lt; soFar &amp;lt;&amp;lt; endl;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    char guess;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n\nEnter your guess: &amp;quot;;&lt;br /&gt;
    cin &amp;gt;&amp;gt; guess;&lt;br /&gt;
    guess = toupper(guess); // 대문자로 바꿈&lt;br /&gt;
    while(used.find(guess) != string::npos)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nYou've already guessed &amp;quot; &amp;lt;&amp;lt; guess &amp;lt;&amp;lt; endl;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Enter your guess: &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; guess;&lt;br /&gt;
        guess = toupper(guess);&lt;br /&gt;
    }&lt;br /&gt;
    used += guess;&lt;br /&gt;
&lt;br /&gt;
    if(THE_WORD.find(guess) != string::npos)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;That's right! &amp;quot; &amp;lt;&amp;lt; guess &amp;lt;&amp;lt; &amp;quot; is in the word.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // soFar에 선택단어 추가&lt;br /&gt;
        if(for i = 0; i &amp;lt; THE_WORD.length(); ++i)&lt;br /&gt;
            if(THE_WORD]i] == guess)&lt;br /&gt;
                soFar[i]=guess;&lt;br /&gt;
        } else {&lt;br /&gt;
            cout &amp;lt;&amp;lt; &amp;quot;Sorry. &amp;quot; &amp;lt;&amp;lt; guess &amp;lt;&amp;lt; &amp;quot; isn't in the word.\n&amp;quot;;&lt;br /&gt;
            ++wrong;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // shut down&lt;br /&gt;
    if(wrong == MAX_WRONG)&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nYou've been hanged!&amp;quot;;&lt;br /&gt;
    else&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nYou guessed it!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nThe word was &amp;quot; &amp;lt;&amp;lt; THE_WORD &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* C에서 보지 못했던 몇가지가 있을거다.&lt;br /&gt;
* 문자열 처리 나쁘지 않은 정도다.&lt;br /&gt;
=== Instructions ===&lt;br /&gt;
* 함수 이해를 위해 간단한 프로그램을 짜보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* instructions.cc */&lt;br /&gt;
// Instructions&lt;br /&gt;
// Demonstrates writing new functions&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
// function prototype (declaration)&lt;br /&gt;
void instructions();&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    instructions();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// function definition&lt;br /&gt;
void instructions()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Welcome to the most fun you've ever had with text!\n\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Here's how to play the game...\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 전통적인 C 함수다.&lt;br /&gt;
=== Yes or No ===&lt;br /&gt;
* 마찬가지로, 함수에 대해 좀더 알아보기 위한 프로그램이다.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* yes_or_no.cc */&lt;br /&gt;
// Yes or nO&lt;br /&gt;
// Demonstrates return values and parameters&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
char askYesNo1();&lt;br /&gt;
char askYesNo2(string question);&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    char answer1 = askYesNo1();&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Thanks for answering: &amp;quot; &amp;lt;&amp;lt; answer1 &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    char answer2 = askYesNo2(&amp;quot;Do you with save your game?&amp;quot;);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Thanks for answering: &amp;quot; &amp;lt;&amp;lt; answer2 &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
char askYesNo1()&lt;br /&gt;
{&lt;br /&gt;
    char response1;&lt;br /&gt;
    do {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Please enter 'y' or 'n': &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; response1;&lt;br /&gt;
    } while(reponse1 != 'y' &amp;amp;&amp;amp; response1 != 'n');&lt;br /&gt;
&lt;br /&gt;
    return response1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
char askYesNo2(string question)&lt;br /&gt;
{&lt;br /&gt;
    char response2;&lt;br /&gt;
    do {&lt;br /&gt;
        cout &amp;lt;&amp;lt; question &amp;lt;&amp;lt; &amp;quot; (y/n): &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; response2;&lt;br /&gt;
    } while(response2 != 'y' &amp;amp;&amp;amp; response2 != 'n');&lt;br /&gt;
&lt;br /&gt;
    return response2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 반환값에 대한 이해를 돕기 위한 프로그램이다.&lt;br /&gt;
=== Scoping ===&lt;br /&gt;
* 중복된 이름의 변수에 대해 알아보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* scoping.cc */&lt;br /&gt;
// Scoping&lt;br /&gt;
// Demonstrates scopes&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
void func();&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    int var = 5; // local variable in main()&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;In main() var is: &amp;quot; &amp;lt;&amp;lt; var &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    func();&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Back in main() var is: &amp;quot; &amp;lt;&amp;lt; var &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;In main() in a new scope var is: &amp;quot; &amp;lt;&amp;lt; var &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Creating new var in new scope.\n&amp;quot;;&lt;br /&gt;
        int var = 10; // {}로 싼 새 영역의 새 변수다.&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;In main() in a new scope var is: &amp;quot; &amp;lt;&amp;lt; var &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;At end of main() var created in new scope no longer exists.\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;At end of main() var is: &amp;quot; &amp;lt;&amp;lt; var &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void func()&lt;br /&gt;
{&lt;br /&gt;
    int var = -5; // func()의 지역변수&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;In func() var is: &amp;quot; &amp;lt;&amp;lt; var &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 지역 변수의 개념에 대해 알 수 있도록 좀 이상하게 만들었다.&lt;br /&gt;
* 오래된 C 컴파일러에서는 동작하지 않을 수 있다.&amp;lt;s&amp;gt;존나 90년대 컴파일러 아니면 웬만한건 다 된다고 보면 된다.&amp;lt;/s&amp;gt;&lt;br /&gt;
=== Global Reach ===&lt;br /&gt;
* &amp;lt;s&amp;gt;빌어먹을&amp;lt;/s&amp;gt;전역변수에 대해 알아보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* global_reach.cc */&lt;br /&gt;
// Global Reach&lt;br /&gt;
// Demonstrates global variables&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int glob = 10; // 전역변수&lt;br /&gt;
&lt;br /&gt;
void access_global();&lt;br /&gt;
void hide_global();&lt;br /&gt;
void change_global();&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;In main() glob is: &amp;quot; &amp;lt;&amp;lt; glob &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
    access_global();&lt;br /&gt;
&lt;br /&gt;
    hide_global();&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;In main() glob is: &amp;quot; &amp;lt;&amp;lt; glob &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    change_global();&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;In main() glob is: &amp;quot; &amp;lt;&amp;lt; glob &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void access_global()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;In access_global() glob is: &amp;quot; &amp;lt;&amp;lt; glob &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void hide_global()&lt;br /&gt;
{&lt;br /&gt;
    int glob = 0; // 전역변수를 재설정하여 값을 숨김&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;In hide_global() glob is: &amp;quot; &amp;lt;&amp;lt; glob &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void change_global()&lt;br /&gt;
{&lt;br /&gt;
    glob = -10; // 전역변수 glob의 값을 바꿈&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;In change_global() glob is : &amp;quot; &amp;lt;&amp;lt; glob &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 전역변수를 쓰는 방법인데, 전역변수는 여러사람 골치아프게 한다.&lt;br /&gt;
* 물론 goto처럼, 쓰는 사람에 따라 좀더 직관적으로 변할 수 있는 것이기도 하다.&amp;lt;s&amp;gt;하지만 너는 아니에요&amp;lt;/s&amp;gt;&lt;br /&gt;
=== Give Me a Number ===&lt;br /&gt;
* 숫자 하나 주세요 프로그램은 범위 내의 숫자를 선택하는 프로그램이다.&lt;br /&gt;
* 함수 사용에 대해 이해하기 위한 예제다.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* give_me_a_number.cc */&lt;br /&gt;
// Give Me a Number&lt;br /&gt;
// Demonstrates default function arguments&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int askNumber(int high, int low = 1);&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    int number = askNumber(5);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Thanks for entering: &amp;quot; &amp;lt;&amp;lt; number &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    number = askNumber(10, 5);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Thanks for entering: &amp;quot; &amp;lt;&amp;lt; number &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int askNumber(int high, int low)&lt;br /&gt;
{&lt;br /&gt;
    int num;&lt;br /&gt;
    do {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Please enter a number&amp;quot; &amp;lt;&amp;lt; &amp;quot; (&amp;quot; &amp;lt;&amp;lt; low &amp;lt;&amp;lt; &amp;quot; - &amp;quot; &amp;lt;&amp;lt; high &amp;lt;&amp;lt; &amp;quot;): &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; num;&lt;br /&gt;
    } while(num &amp;gt; high || num &amp;lt; low);&lt;br /&gt;
    &lt;br /&gt;
    return num;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 코드를 잘 보면, 초기값을 준 게 보일거다.&lt;br /&gt;
=== Triple ===&lt;br /&gt;
* 함수 오버로딩을 이해하기 위해 프로그램을 하나 짜보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* triple.cc */&lt;br /&gt;
// Triple&lt;br /&gt;
// Demonstrates function overloading&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int triple(int number);&lt;br /&gt;
string triple(string text);&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Tripling 5: &amp;quot; &amp;lt;&amp;lt; triple(5) &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Tripling 'gamer': &amp;quot; &amp;lt;&amp;lt; triple(&amp;quot;gamer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int triple(int number)&lt;br /&gt;
{&lt;br /&gt;
    return (number * 3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string triple(string text)&lt;br /&gt;
{&lt;br /&gt;
    return (text + text + text);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 같은 이름의 함수라도, 타입에 따라 다르게 호출될 수 있다.&lt;br /&gt;
* 이걸 이용해서 코드를 매우 복잡하게 짤수도 있다.&amp;lt;s&amp;gt;웬만하믄 그르지말자&amp;lt;/s&amp;gt;&lt;br /&gt;
=== Taking Damage ===&lt;br /&gt;
* 인라인함수에 대해 알아보기 위해 데미지딜링을 짜보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* taking_damage.cc */&lt;br /&gt;
// Taking Damage&lt;br /&gt;
// Demonstrates function inlining&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int radiation(int health);&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    int health = 80;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Your health is &amp;quot; &amp;lt;&amp;lt; health &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    health = radiation(health);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;After radiation exposure your health is &amp;quot; &amp;lt;&amp;lt; health &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    health = radiation(health);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;After radiation exposure your health is &amp;quot; &amp;lt;&amp;lt; health &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    health = radiation(health);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;After radiation exposure your health is &amp;quot; &amp;lt;&amp;lt; health &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
inline int radiation(int health)&lt;br /&gt;
{&lt;br /&gt;
    return (health / 2);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 뭐, 별거 없다. 요즘은 컴파일러가 다 알아서 해주니..&lt;br /&gt;
* 예전 컴파일러에서는, 즉시 처리가 되지 않아 값이 제대로 안 나왔었다.&amp;lt;s&amp;gt;예전 컴파일러를 구할수가 없어 보여줄수가 없네&amp;lt;/s&amp;gt;&lt;br /&gt;
=== Mad-Lib ===&lt;br /&gt;
* 사용자 입력을 받아 스토리를 만드는 &amp;lt;s&amp;gt;미친 애드립&amp;lt;/s&amp;gt;프로그램&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* mad_lib.cc */&lt;br /&gt;
// Mad-Lib&lt;br /&gt;
// Creates a story based on user input&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
string askText(string prompt);&lt;br /&gt;
int askNumber(string prompt);&lt;br /&gt;
void tellStory(string name, string noun, int number, string bodyPart, string verb);&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Welcome to Mad Lib.\n\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Answer the following questions to help create new story.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    string name = askText(&amp;quot;Please enter a name: &amp;quot;);&lt;br /&gt;
    string noun = askText(&amp;quot;Please enter a plural noun: &amp;quot;);&lt;br /&gt;
    int number = askNumber(&amp;quot;Please enter a number: &amp;quot;);&lt;br /&gt;
    string bodyPart = askText(&amp;quot;Please enter a body part: &amp;quot;);&lt;br /&gt;
    string verb = askText(&amp;quot;Please enter a verb: &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    tellStory(name, noun, number, bodyPart, verb);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string askText(string prompt)&lt;br /&gt;
{&lt;br /&gt;
    string text;&lt;br /&gt;
    cout &amp;lt;&amp;lt; prompt;&lt;br /&gt;
    cin &amp;gt;&amp;gt; text;&lt;br /&gt;
    return text;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int askNumber(string prompt)&lt;br /&gt;
{&lt;br /&gt;
    int num;&lt;br /&gt;
    cout &amp;lt;&amp;lt; prompt;&lt;br /&gt;
    cin &amp;gt;&amp;gt; num;&lt;br /&gt;
    return num;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void tellStory(string name, string noun, int number, string bodyPart, string verb)&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nHere's your story:\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The famous explorer &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; name;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot; had nearly given up a life-long quest to find\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The Lost City of &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; noun;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot; when one day, the &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; noun;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot; found the explorer.\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Surrounded by &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; number;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot; &amp;quot; &amp;lt;&amp;lt; noun;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;, a tear came to &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; name &amp;lt;&amp;lt; &amp;quot;'s&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; bodyPart &amp;lt;&amp;lt; &amp;quot;.\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;After all this time, the quest was finally over. &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;And then, the &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; noun &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;promptly devoured &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; name &amp;lt;&amp;lt; &amp;quot;. &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The moral of the story? Be careful what you &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; verb;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot; for.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 스토리텔링. 별거없다.&lt;br /&gt;
=== Referencing ===&lt;br /&gt;
* 레퍼런스 변수에 대해.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* referencing.cc */&lt;br /&gt;
// Referencing&lt;br /&gt;
// Demonstrates using references&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    int myScore = 1000;&lt;br /&gt;
    int&amp;amp; mikesScore = myScore; // 레퍼런스 변수를 만듦&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;myScore is: &amp;quot; &amp;lt;&amp;lt; myScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;mikesScore is: &amp;quot; &amp;lt;&amp;lt; mikesScore &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Adding 500 to myScore\n&amp;quot;;&lt;br /&gt;
    myScore += 500;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;myScore is: &amp;quot; &amp;lt;&amp;lt; myScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;mikesScore is: &amp;quot; &amp;lt;&amp;lt; mikesScore &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Adding 500 to mikesScore\n&amp;quot;;&lt;br /&gt;
    mikesScore += 500;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;myScore is: &amp;quot; &amp;lt;&amp;lt; myScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;mikesScore is: &amp;quot; &amp;lt;&amp;lt; mikesScore &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 레퍼런스 변수는 대충 심볼릭 링크랑 비슷한 개념으로 보면 된다.&amp;lt;s&amp;gt;틀린 내용이라 생각되면 토론에 틀렸다고 하던지 니가 직접 고치던지&amp;lt;/s&amp;gt;&lt;br /&gt;
=== Swap ===&lt;br /&gt;
* 우와. Call by reference가 나왔다.&lt;br /&gt;
* 예제니까 편한데, 실무에서 이거 디버깅 완전 뒤짐&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* swap.c */&lt;br /&gt;
// Swap&lt;br /&gt;
// Demonstrates passing references to alter argument variables&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
void badSwap(int x, int y);&lt;br /&gt;
void goodSwap(int&amp;amp; x, int&amp;amp; y);&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    int myScore = 150;&lt;br /&gt;
    int yourScore = 1000;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Original values\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;myScore: &amp;quot; &amp;lt;&amp;lt; myScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;yourScore: &amp;quot; &amp;lt;&amp;lt; yourScore &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Calling badSwap()\n&amp;quot;;&lt;br /&gt;
    badSwap(myScore, yourScore);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;myScore: &amp;quot; &amp;lt;&amp;lt; myScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;yourScore: &amp;quot; &amp;lt;&amp;lt; yourScore &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Calling goodSwap()\n&amp;quot;;&lt;br /&gt;
    goodSwap(myScore, yourScore);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;myScore: &amp;quot; &amp;lt;&amp;lt; myScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;yourScore: &amp;quot; &amp;lt;&amp;lt; yourScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void badSwap(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    int temp = x;&lt;br /&gt;
    x = y;&lt;br /&gt;
    y = temp;&lt;br /&gt;
}&lt;br /&gt;
void goodSwap(int&amp;amp; x, int&amp;amp; y)&lt;br /&gt;
{&lt;br /&gt;
    int temp = x;&lt;br /&gt;
    x = y;&lt;br /&gt;
    y = temp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 보면, 함수 자체는 별 차이 없다.&lt;br /&gt;
* 이런거 디버깅 하는건 거의 경험이나 다름없는것 같다.&lt;br /&gt;
=== Inventory Displayer ===&lt;br /&gt;
* 위에 Hero''s inventory가 있는데, 그 확장판이라고 생각하면 된다.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* inventory_displayer.cc */&lt;br /&gt;
// Inventory Displayer&lt;br /&gt;
// Demonstrates constant references&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
// vec 함수는 상수 레퍼런스를 스트링 벡터로 집어넣은거.&lt;br /&gt;
void display(const vector&amp;lt;string&amp;gt;&amp;amp; vec);&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    vector&amp;lt;string&amp;gt; inventory;&lt;br /&gt;
    inventory.push_back(&amp;quot;sword&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    display(inventory);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// vec 파라미터는 상수 레퍼런스를 스트링 벡터로 집어넣은거.&lt;br /&gt;
void display(const vector&amp;lt;string&amp;gt;&amp;amp; vec)&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Your items:\n&amp;quot;;&lt;br /&gt;
    for(vector&amp;lt;string&amp;gt;::const_iterator iter = vec.begin(); iter != vec.end(); ++iter)&lt;br /&gt;
        cout &amp;lt;&amp;lt; *iter &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 벡터를 함수로 넘겨주기도 가능한걸 볼 수 있다.&lt;br /&gt;
=== Inventory Referencer ===&lt;br /&gt;
* 리턴값도 좀 그렇게 받을수 없을까?&lt;br /&gt;
* 한번 해보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* inventory_referencer.cc */&lt;br /&gt;
// Inventory Referencer&lt;br /&gt;
// Demonstrates returning a references&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
// 레퍼런스에서 스트링을 뽑아서 반환&lt;br /&gt;
string&amp;amp; refToElement(vector&amp;lt;string&amp;gt;&amp;amp; vec, int i);&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    vecotr&amp;lt;string&amp;gt; inventory;&lt;br /&gt;
    inventory.push_back(&amp;quot;sword&amp;quot;);&lt;br /&gt;
    inventory.push_back(&amp;quot;armor&amp;quot;);&lt;br /&gt;
    inventory.push_back(&amp;quot;shield&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // 변환된 참조가 참조하는 문자열을 표시&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Sending the returned reference to cout:\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; refToElement(inventory, 0) &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // 다른 하나의 참조를 할당 - 대안책&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Assigning the returned reference to another reference.\n&amp;quot;;&lt;br /&gt;
    string&amp;amp; rStr = refToElement(inventory, 1);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Sending the new reference to cout:\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; rStr &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // 스트링 카피&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Assigning the returned reference to a string object.\n&amp;quot;;&lt;br /&gt;
    string str = refToElement(inventory, 2);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Sending the new string object to cout:\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; str &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // 반환된 레퍼런스의 스트링을 바꿈&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Altering an object through a returned reference.\n&amp;quot;;&lt;br /&gt;
    rStr = &amp;quot;Healing Potion&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Sending the altered object to cout:\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; inventory[1] &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 레퍼런스에서 스트링을 뽑아서 반환&lt;br /&gt;
string&amp;amp; refToElement(vector&amp;lt;string&amp;gt;&amp;amp; vec, int i)&lt;br /&gt;
{&lt;br /&gt;
    return vec[i];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 와, 보기 힘들고 추적도 힘들다.&lt;br /&gt;
* C 스타일에서 많이 쓰던 방식.&lt;br /&gt;
=== Pointing ===&lt;br /&gt;
* 포인터 사용방법을 좀 알아보자.&amp;lt;s&amp;gt;드디어 나왔다 개빡치는 포인터&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* pointing.cc */&lt;br /&gt;
// Pointing&lt;br /&gt;
// Demonstrates using pointers&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    int* pApointer; // 포인터 선언&lt;br /&gt;
    int* pScore = 0; // 포인터 선언 및 초기화&lt;br /&gt;
    int score = 1000;&lt;br /&gt;
    pScore = &amp;amp;score; // 포인터 pScore에 변수 score의 주소를 지정&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Assigning &amp;amp;score to pScore\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;&amp;amp;score is: &amp;quot; &amp;lt;&amp;lt; &amp;amp;score &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;; // 변수 score의 주소&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;pScore is: &amp;quot; &amp;lt;&amp;lt; pScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;; // 포인터에 저장된 주소&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;score is: &amp;quot; &amp;lt;&amp;lt; score &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;*pScore is: &amp;quot; &amp;lt;&amp;lt; *pScore &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;; // 포인터가 가리키는 값&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Adding 500 to score\n&amp;quot;;&lt;br /&gt;
    score += 500;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;score is: &amp;quot; &amp;lt;&amp;lt; score &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;*pScore is: &amp;quot; &amp;lt;&amp;lt; *pScore &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Adding 500 to *pScore\n&amp;quot;;&lt;br /&gt;
    *pScore += 500;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;score is: &amp;quot; &amp;lt;&amp;lt; score &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;*pScore is: &amp;quot; &amp;lt;&amp;lt; *pScore &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Assigning &amp;amp;newScore to pScore\n&amp;quot;;&lt;br /&gt;
    int newScore = 5000;&lt;br /&gt;
    pScore = &amp;amp;newScore;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;&amp;amp;newScore is: &amp;quot; &amp;lt;&amp;lt; &amp;amp;newScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;pScore is: &amp;quot; &amp;lt;&amp;lt; pScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;newScore is: &amp;quot; &amp;lt;&amp;lt; newScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;*pScore is: &amp;quot; &amp;lt;&amp;lt; *pScore &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Assigning &amp;amp;str to pStr\n&amp;quot;;&lt;br /&gt;
    string str = &amp;quot;score&amp;quot;;&lt;br /&gt;
    string* pStr = &amp;amp;str; // 문자열 객체에 포인터 지정&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;str is: &amp;quot; &amp;lt;&amp;lt; str &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;*pStr is: &amp;quot; &amp;lt;&amp;lt; *pStr &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;((pStr).size() is: &amp;quot; &amp;lt;&amp;lt; (*pStr).size() &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 사실 포인터는 익숙해지기 전엔 쓰기 힘들다.&lt;br /&gt;
=== Swap Pointer ===&lt;br /&gt;
* 포인터를 이용해서 스왑을 해보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* swap_pointer.cc */&lt;br /&gt;
// Swap Pointer&lt;br /&gt;
// Demonstrates passing constant pointers to alter argument variables&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
void badSwap(int x, int y)&lt;br /&gt;
void goodSwap(int* const pX, int* const pY);&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    int myScore = 150;&lt;br /&gt;
    int yourScore = 1000;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Original values\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;myScore: &amp;quot; &amp;lt;&amp;lt; myScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;yourScore: &amp;quot; &amp;lt;&amp;lt; yourScore &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Calling badSwap()\n&amp;quot;;&lt;br /&gt;
    badSwap(myScore, yourScore);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;myScore: &amp;quot; &amp;lt;&amp;lt; myScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;yourScore: &amp;quot; &amp;lt;&amp;lt; yourScore &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Calling goodSwap()\n&amp;quot;;&lt;br /&gt;
    goodSwap(&amp;amp;myScore, &amp;amp;yourScore);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;myScore: &amp;quot; &amp;lt;&amp;lt; myScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;yourScore: &amp;quot; &amp;lt;&amp;lt; yourScore &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void badswap(int x, int y)&lt;br /&gt;
{&lt;br /&gt;
    int temp = x;&lt;br /&gt;
    x = y;&lt;br /&gt;
    y = temp;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goodSwap(int* const pX, int* const pY)&lt;br /&gt;
{&lt;br /&gt;
    // pX가 가리키는 값을 temp에 저장&lt;br /&gt;
    int temp = *pX;&lt;br /&gt;
    // pY가 가리키는 값을 pX가 가리키는 주소에 덮어씀&lt;br /&gt;
    *pX = *pY;&lt;br /&gt;
    // 저장해둔 원래 pX가 가리키고 있던 값을 pY가 가리키는 주소에 덮어씀&lt;br /&gt;
    *pY = temp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Call by reference와 비교해보면 별 차이 없다는걸 느낄 수 있다.&lt;br /&gt;
=== Inventory Pointer ===&lt;br /&gt;
* 인벤토리 프로그램이다&amp;lt;s&amp;gt;맨날 나오냐 이놈은&amp;lt;/s&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* inventory_pointer.cc */&lt;br /&gt;
// Inventory Pointer&lt;br /&gt;
// Demonstrates returning a pointer&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
// 포인터로 문자열 요소를 받는다.&lt;br /&gt;
string* ptrToElement(vector&amp;lt;string&amp;gt;* const pVec, int i);&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    vector&amp;lt;string&amp;gt; inventory;&lt;br /&gt;
    inventory.push_back(&amp;quot;sword&amp;quot;);&lt;br /&gt;
    inventory.push_back(&amp;quot;armor&amp;quot;);&lt;br /&gt;
    inventory.push_back(&amp;quot;shield&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // 벡터 포인터를 함수로 넘겨 문자열을 반환받는다.&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Sending the objected pointed to by returned pointer:\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; *(ptrToElement(&amp;amp;inventory, 0)) &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // 또 하나의 포인터 등록 - 대안책&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Assigning the returned pointer to another pointer.\n&amp;quot;;&lt;br /&gt;
    string* pStr = ptrToElement(&amp;amp;inventory, 1);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Sending the object pointed to by new pointer to cout:\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; *pStr &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // 문자열 객체 복사&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Assigning object pointed by pointer to a string object.\n&amp;quot;;&lt;br /&gt;
    string str = *(ptrToElement(&amp;amp;inventory, 2));&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Sending the new string object to cout:\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; str &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // 반환된 포인터로 문자열 객체를 변경&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Altering an object through a returned pointer.\n&amp;quot;;&lt;br /&gt;
    *pStr = &amp;quot;Healing Potion&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Sending the altered object to cout:\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; inventory[1] &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string* ptrToElement(vector&amp;lt;string&amp;gt;* const pVec, int i)&lt;br /&gt;
{&lt;br /&gt;
    // pVec가 가리키는 벡터의 i번째 요소를 반환&lt;br /&gt;
    return &amp;amp;((*pVec)[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 이정도를 한번보고 이해한다면 변태거나, 이해를 못했거나 둘 중 하나다.&amp;lt;s&amp;gt;그리고 이런걸 이해할수록 이성과의 소통이 힘들어진다&amp;lt;/s&amp;gt;&lt;br /&gt;
=== Array Passer ===&lt;br /&gt;
* 배열에 대해 알아보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* array_passer.cc */&lt;br /&gt;
// Array Passer&lt;br /&gt;
// Demonstrates relationship between pointers and arrays&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
void increase(int* const array, const int NUM_ELEMENTS);&lt;br /&gt;
void display(const int* const array, const int NUM_ELEMENTS);&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Creating an array of high scores.\n\n&amp;quot;;&lt;br /&gt;
    const int NUM_SCORES = 3;&lt;br /&gt;
    int highScores[NUM_SCORES] = { 5000, 3500, 2700 };&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Displaying scores using array name as a constant pointer.\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; *highScores &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; *(highScores + 1) &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; *(highScores + 2) &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Increasing scores by passing array as a constant pointer.\n\n&amp;quot;;&lt;br /&gt;
    increase(highScores, NUM_SCORES);&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Displaying scores by passing array as a constant pointer to a constant.\n&amp;quot;;&lt;br /&gt;
    display(highScores, NUM_SCORES);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void increase(int* const array, const int NUM_ELEMENTS)&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_ELEMENTS; ++i)&lt;br /&gt;
        array[i] += 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void display(const int* const array, const int NUM_ELEMENTS)&lt;br /&gt;
{&lt;br /&gt;
    for(int i = 0; i &amp;lt; NUM_ELEMENTS; ++i)&lt;br /&gt;
        cout &amp;lt;&amp;lt; array[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 상수포인터에 대한 예제다.&lt;br /&gt;
=== Tic-Tac-Toe Game ===&lt;br /&gt;
* 어? 틱탁토 왜 또 나오냐구? 먼젓번꺼는 Board고, 이건 실제 플레이할 수 있는거.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Tic-Tac-Toe&lt;br /&gt;
// Plays the game of tic-tac-toe against a human opponent&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;algorithm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
// 전역상수&lt;br /&gt;
const char X = 'X';&lt;br /&gt;
const char O = 'O';&lt;br /&gt;
const char EMPTY = ' ';&lt;br /&gt;
const char TIE = 'T';&lt;br /&gt;
const char NO_ONE = 'N';&lt;br /&gt;
&lt;br /&gt;
// 함수 원형&lt;br /&gt;
void instructions();&lt;br /&gt;
char askYesNo(string question);&lt;br /&gt;
int askNumber(string question, int high, int low = 0);&lt;br /&gt;
char humanPiece();&lt;br /&gt;
char opponent(char piece);&lt;br /&gt;
void displayBoard(const vector&amp;lt;char&amp;gt;&amp;amp; board);&lt;br /&gt;
char winner(const vector&amp;lt;char&amp;gt;&amp;amp; board);&lt;br /&gt;
bool isLegal(const vector&amp;lt;char&amp;gt;&amp;amp; board, int move);&lt;br /&gt;
int humanMove(const vector&amp;lt;char&amp;gt;&amp;amp; board, char human);&lt;br /&gt;
int computerMove(vector&amp;lt;char&amp;gt; board, char computer);&lt;br /&gt;
void announceWinner(char winner, char computer, char human);&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char const *argv[])&lt;br /&gt;
{&lt;br /&gt;
    /* code */&lt;br /&gt;
    int move;&lt;br /&gt;
    const int NUM_SQUARES = 9;&lt;br /&gt;
    vector&amp;lt;char&amp;gt; board(NUM_SQUARES, EMPTY);&lt;br /&gt;
&lt;br /&gt;
    instructions();&lt;br /&gt;
    char human = humanPiece();&lt;br /&gt;
    char computer = opponent(human);&lt;br /&gt;
    char turn = X;&lt;br /&gt;
    displayBoard(board);&lt;br /&gt;
&lt;br /&gt;
    while(winner(board) == NO_ONE)&lt;br /&gt;
    {&lt;br /&gt;
        if(turn == human)&lt;br /&gt;
        {&lt;br /&gt;
            move = humanMove(board, human);&lt;br /&gt;
            board[move] = human;&lt;br /&gt;
        } else {&lt;br /&gt;
            move = computerMove(board, computer);&lt;br /&gt;
            board[move] = computer;&lt;br /&gt;
        }&lt;br /&gt;
        displayBoard(board);&lt;br /&gt;
        turn = opponent(turn);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    announcewinner(winner(board), computer, human);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void instructions()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Welcome to the ultimate man-machine showdown: Tic-Tac-Toe.\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;-where human brain is pit against silicon processor\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Make your move known by entering a number. 0 - 8. The number\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;corresponds to the desired board position. as illustrated:\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;    0 | 1 | 2\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;    ---------\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;    3 | 4 | 5\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;    ---------\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;    6 | 7 | 8\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Prepare yourself, human. The battle is about to begin.\n\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
char askYesNo(string question)&lt;br /&gt;
{&lt;br /&gt;
    char response;&lt;br /&gt;
    do {&lt;br /&gt;
        cout &amp;lt;&amp;lt; question &amp;lt;&amp;lt; &amp;quot;(y/n): &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; response;&lt;br /&gt;
    } while(response != 'y' &amp;amp;&amp;amp; response != 'n');&lt;br /&gt;
    &lt;br /&gt;
    return response;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int askNumber(string question, int high, int low)&lt;br /&gt;
{&lt;br /&gt;
    int number;&lt;br /&gt;
    do {&lt;br /&gt;
        cout &amp;lt;&amp;lt; question &amp;lt;&amp;lt; &amp;quot; (&amp;quot; &amp;lt;&amp;lt; low &amp;lt;&amp;lt; &amp;quot; - &amp;quot; &amp;lt;&amp;lt; high &amp;lt;&amp;lt; &amp;quot;): &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; number;&lt;br /&gt;
    } while(number &amp;gt; high || number &amp;lt;&amp;lt; low);&lt;br /&gt;
    &lt;br /&gt;
    return number;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
char humanPiece()&lt;br /&gt;
{&lt;br /&gt;
    char go_first = askYesNo(&amp;quot;Do you require the first move?&amp;quot;);&lt;br /&gt;
    if(go_first == 'y')&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nThen take the first move. You will need it.\n&amp;quot;;&lt;br /&gt;
        return X;&lt;br /&gt;
    } else {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nYour bravery will be your undoing... I will go first.\n&amp;quot;;&lt;br /&gt;
        return O;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
char opponent(char piece)&lt;br /&gt;
{&lt;br /&gt;
    if(piece == X)&lt;br /&gt;
        return O;&lt;br /&gt;
    else&lt;br /&gt;
        return X;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void displayBoard(const vector&amp;lt;char&amp;gt;&amp;amp; board)&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n\t&amp;quot; &amp;lt;&amp;lt; board[0] &amp;lt;&amp;lt; &amp;quot; | &amp;quot; &amp;lt;&amp;lt; board[1] &amp;lt;&amp;lt; &amp;quot; | &amp;quot; &amp;lt;&amp;lt; board[2];&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n\t&amp;quot; &amp;lt;&amp;lt; &amp;quot;---------&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n\t&amp;quot; &amp;lt;&amp;lt; board[3] &amp;lt;&amp;lt; &amp;quot; | &amp;quot; &amp;lt;&amp;lt; board[4] &amp;lt;&amp;lt; &amp;quot; | &amp;quot; &amp;lt;&amp;lt; board[5];&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n\t&amp;quot; &amp;lt;&amp;lt; &amp;quot;---------&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n\t&amp;quot; &amp;lt;&amp;lt; board[6] &amp;lt;&amp;lt; &amp;quot; | &amp;quot; &amp;lt;&amp;lt; board[7] &amp;lt;&amp;lt; &amp;quot; | &amp;quot; &amp;lt;&amp;lt; board[8];&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
char winner(const vector&amp;lt;char&amp;gt;&amp;amp; board)&lt;br /&gt;
{&lt;br /&gt;
    // 이기는 모든 경우&lt;br /&gt;
    const int WINNING_ROWS[8][3] = {&lt;br /&gt;
        {0, 1, 2}, {3, 4, 5}, {6, 7, 8},&lt;br /&gt;
        {0, 3, 6}, {1, 4, 7}, {2, 5, 8},&lt;br /&gt;
        {0, 4, 8}, {2, 4, 6}&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    const int TOTAL_ROWS = 8;&lt;br /&gt;
&lt;br /&gt;
    // 한줄에 3개의 값이 안 비고 같으면 승자가 있는거&lt;br /&gt;
    for(int row = 0; row &amp;lt; TOTAL_ROWS; ++row)&lt;br /&gt;
    {&lt;br /&gt;
        if((board[WINNING_ROWS[row][0]] != EMPTY) &amp;amp;&amp;amp; (board[WINNING_ROWS[row][0]] == board[WINNING_RPWS[row][1]]) &amp;amp;&amp;amp; (board[WINNING_ROWS[row][2]])) {&lt;br /&gt;
            return board[WINNING_ROWS[row][0]];&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 이긴사람이 없으면 비김 체크&lt;br /&gt;
    if(count(board.begin(), board.end(), EMPTY) == 0)&lt;br /&gt;
        return TIE;&lt;br /&gt;
&lt;br /&gt;
    // 위의 상황이 아니면 아직 겜이 안끝난거임&lt;br /&gt;
    return NO_ONE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
inline bool isLegal(int move, const vector&amp;lt;char&amp;gt;&amp;amp; board)&lt;br /&gt;
{&lt;br /&gt;
    return (board[move] == EMPTY);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int humanMove(const vector&amp;lt;char&amp;gt;&amp;amp; board, char human)&lt;br /&gt;
{&lt;br /&gt;
    int move = askNumber(&amp;quot;Where will you move?&amp;quot;, (board.size() - 1));&lt;br /&gt;
    while(!isLegal(move, board))&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nThat square is already occupied. foolish human.\n&amp;quot;;&lt;br /&gt;
        move = askNumber(&amp;quot;Where will you move?&amp;quot;, (board.size() - 1));&lt;br /&gt;
    }&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Fine...\n&amp;quot;;&lt;br /&gt;
    return move;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* AI는 매우 단순하게.&lt;br /&gt;
1. 움직여야 한다.&lt;br /&gt;
2. 지지 않으려면 막아야 한다.&lt;br /&gt;
3. 중간 &amp;gt; 코너 &amp;gt; 변 순으로 남는쪽에 찍는다. */&lt;br /&gt;
int computerMove(vector&amp;lt;char&amp;gt; board, char computer)&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;I shall take square number &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // 찍어서 이길 수 있는곳이 있다면 거길 찍는다.&lt;br /&gt;
    for(int move = 0; move &amp;lt; board.size(); ++move)&lt;br /&gt;
    {&lt;br /&gt;
        if(isLegal(move, board))&lt;br /&gt;
        {&lt;br /&gt;
            board[move] = computer;&lt;br /&gt;
            if(winnner(board) == compter)&lt;br /&gt;
            {&lt;br /&gt;
                cout &amp;lt;&amp;lt; move &amp;lt;&amp;lt; endl;&lt;br /&gt;
                return move;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // 확인했으면 취소한다.&lt;br /&gt;
            board[move] = EMPTY;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 사람이 이길것 같으면 막는다.&lt;br /&gt;
    char human = opponent(computer);&lt;br /&gt;
    for(int move = 0; move &amp;lt; board.size(); ++move)&lt;br /&gt;
    {&lt;br /&gt;
        if(isLegal(move, board))&lt;br /&gt;
        {&lt;br /&gt;
            board[move] = human;&lt;br /&gt;
            if(winner(board) == human)&lt;br /&gt;
            {&lt;br /&gt;
                cout &amp;lt;&amp;lt; move &amp;lt;&amp;lt; endl;&lt;br /&gt;
                return move;&lt;br /&gt;
            }&lt;br /&gt;
            // 확인했으면 취소한다.&lt;br /&gt;
            board[move] = EMPTY;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 우선순위에 따라간다.&lt;br /&gt;
    const int BEST_MOVES[] = { 4, 0, 2, 6, 8, 1, 3, 5, 7 };&lt;br /&gt;
    // 이번에 찍어서 승자가 안 나온다면 우선순위에 따라간다.&lt;br /&gt;
    for(int i = 0; i &amp;lt; board.size(); ++i)&lt;br /&gt;
    {&lt;br /&gt;
        int move = BEST_MOVES[1];&lt;br /&gt;
        if(isLegal(move, board))&lt;br /&gt;
        {&lt;br /&gt;
            cout &amp;lt;&amp;lt; move &amp;lt;&amp;lt; endl;&lt;br /&gt;
            return move;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void announceWinner(char winner, char computer, char human)&lt;br /&gt;
{&lt;br /&gt;
    if(winner == computer)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; winner &amp;lt;&amp;lt; &amp;quot;'s won!\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;As I predicted, human. I am triumphant once more - proof\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;that computers are superior to humans in all regards.\n&amp;quot;;&lt;br /&gt;
    } else if(winner == human) {&lt;br /&gt;
        cout &amp;lt;&amp;lt; winner &amp;lt;&amp;lt; &amp;quot;'s won!\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;No, no! It cannot be! Somehow you tricked me. human.\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;But never again! I, the computer, so swear it!\n&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;It's a tie.\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;You were most lucky, human, and somehow managed to tie me.\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Celebrate... for this is the best you will ever achieve.\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 아직 손볼 구석이 많긴 하지만 어쨌든 동작하는거 하나 만들어 보았다.&lt;br /&gt;
=== Simple Critter ===&lt;br /&gt;
* C++에서 사용할 수 있는 클래스라는 타입을 소개하기 위해 간단한걸 하나 만들어보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* simple_critter.cc */&lt;br /&gt;
// Simple Critter&lt;br /&gt;
// Demonstrates creating a new type&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Critter // 클래스 선언. 새로운 타입, 크리터&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    int m_Hunger; // 데이터 멤버. 보통 m_으로 시작하는건 멤버 변수다.&lt;br /&gt;
    void Greet(); // 멤버 함수 프로토타입&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void Critter::Greet() // 멤버 함수 정의&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Hi, I'm a critter. My hunger level is &amp;quot; &amp;lt;&amp;lt; m_Hunger &amp;lt;&amp;lt; &amp;quot;.\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    Critter crit1;&lt;br /&gt;
    Critter crit2;&lt;br /&gt;
&lt;br /&gt;
    crit1.m_Hunger = 9;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;crit1's hunger level is &amp;quot; &amp;lt;&amp;lt; crit1.m_Hunger &amp;lt;&amp;lt; &amp;quot;.\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cirt2.m_Hunger = 3;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;crit2's hunger level is &amp;quot; &amp;lt;&amp;lt; crit2.m_Hunger &amp;lt;&amp;lt; &amp;quot;.\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    crit1.Greet();&lt;br /&gt;
    crit2.Greet();&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* C++의 꽃 클래스다.&lt;br /&gt;
* C++이 객체지향으로 불리우는 이유다.&lt;br /&gt;
* 뭐 객체니 뭐니.. 뭉탱이라고 생각하면 될듯 싶은데..&amp;lt;s&amp;gt;먹기 좋게 썰었다고 표현하면 되려나&amp;lt;/s&amp;gt;&lt;br /&gt;
=== Constructor Critter ===&lt;br /&gt;
* 생성자에 대해 알아보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* constructor_critter.cc */&lt;br /&gt;
// Constructor Critter&lt;br /&gt;
// Demonstrates constructors&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Critter&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    int m_Hunger;&lt;br /&gt;
&lt;br /&gt;
    Critterint hunger = 0); // 생성자 프로토타입&lt;br /&gt;
    void Greet();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Critter::Critter(int hunger) // 생성자 정의&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;A new critter has been born!&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
    m_Hunger = hunger;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Critter::Greet()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Hi, I'm a critter. My hunger level is &amp;quot; &amp;lt;&amp;lt; m_Hunger &amp;lt;&amp;lt; &amp;quot;.\n\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    Critter crit(7);&lt;br /&gt;
    crit.Greet();&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 생성자 별것 없다.&lt;br /&gt;
* 생성할때 뭐 실행하는거임.&lt;br /&gt;
=== Private Critter ===&lt;br /&gt;
* 보호에 대해 좀 알아보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* private_critter.cc */&lt;br /&gt;
// Private Critter&lt;br /&gt;
// Demonstrates setting member access Levels&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Critter&lt;br /&gt;
{&lt;br /&gt;
public: // public 영역 시작&lt;br /&gt;
    Critter(int hunger = 0);&lt;br /&gt;
    int GetHunger() const;&lt;br /&gt;
    void SetHunger(int hunger);&lt;br /&gt;
&lt;br /&gt;
private: // private 영역 시작&lt;br /&gt;
    int m_Hunger;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Critter::Critter(int hunger): m_Hunger(hunger)&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;A new critter has been born!&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int Critter::GetHunger() const&lt;br /&gt;
{&lt;br /&gt;
    return m_Hunger;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Critter:SetHunger(int hunger)&lt;br /&gt;
{&lt;br /&gt;
    if(hunger &amp;lt; 0)&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;You can't set a critter's hunger to a negative number.\n\n&amp;quot;;&lt;br /&gt;
    else&lt;br /&gt;
        m_Hunger = hunger;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    Critter crit(5);&lt;br /&gt;
    //cout &amp;lt;&amp;lt; crit.m_Hunger; // 안됨. m_Hunger는 private라서.&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Calling GetHunger(): &amp;quot; &amp;lt;&amp;lt; crit.GetHunger() &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Calling SetHunger() with -1.\n&amp;quot;;&lt;br /&gt;
    crit.SetHunger(-1);&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Calling SetHunger() with 9.\n&amp;quot;;&lt;br /&gt;
    crit.SetHunger(9);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Calling GetHunger(): &amp;quot; &amp;lt;&amp;lt; crit.GetHunger() &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 일반적으로 API들은 getXX, setXX 등의 함수가 클래스 안에 있다.&lt;br /&gt;
* 뭐 대충 이런식으로 다들 짠다.&lt;br /&gt;
=== Static Critter ===&lt;br /&gt;
* static에 대해 좀 알아보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* static_critter.cc */&lt;br /&gt;
// Static Critter&lt;br /&gt;
// Demonstrates static data members and functions&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Critter&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    static int s_Total; // Static. 크리터 객체의 총 갯수&lt;br /&gt;
    Critter(int hunger = 0): m_Hunger(hunger)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;A critter has been born!&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
        ++s_Total;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    static int GetTotal() // Static 멤버 함수&lt;br /&gt;
    {&lt;br /&gt;
        return s_Total;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    int m_Hunger;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int Critter::s_Total = 0; // 스태틱 데이터 멤버 초기화&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The total number of critters is: &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; Critter::s_Total &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    Critter crit1, crit2, crit3;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nThe total number of critters is: &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; Critter::GetTotal() &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 클래스 내 전역변수처럼 사용할 수 있는걸 볼 수 있다.&lt;br /&gt;
=== Critter Caretaker ===&lt;br /&gt;
* 간단한 다마고찌를 만들어보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* critter_caretaker.cc */&lt;br /&gt;
// Critter Caretaker&lt;br /&gt;
// Simulates caring for a virtualpet&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Critter&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Critter(int hunger = 0, int boredom = 0);&lt;br /&gt;
    void Talk();&lt;br /&gt;
    void Eat(int food = 4);&lt;br /&gt;
    void Play(int fun = 4);&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    int m_Hunger;&lt;br /&gt;
    int m_Boredom;&lt;br /&gt;
&lt;br /&gt;
    int GetMood() const;&lt;br /&gt;
    void PassTime(int time = 1);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Critter::Critter(int hunger, int boredom): m_Hunger(hunger), m_Boredom(boredom)&lt;br /&gt;
{}&lt;br /&gt;
&lt;br /&gt;
inline int Critter::GetMood() const&lt;br /&gt;
{&lt;br /&gt;
    return (m_Hunger + m_Boredom);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Critter::PassTime(int time)&lt;br /&gt;
{&lt;br /&gt;
    m_Hunger += time;&lt;br /&gt;
    m_Boredom += time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Critter::Talk()&lt;br /&gt;
{&lt;br /&gt;
    coud &amp;lt;&amp;lt; &amp;quot;I'm a critter and I feel &amp;quot;;&lt;br /&gt;
    int mood = GetMood();&lt;br /&gt;
    if(mood &amp;gt; 15)&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;mad.\n&amp;quot;;&lt;br /&gt;
    else if(mood &amp;gt; 10)&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;frustrated.\n&amp;quot;;&lt;br /&gt;
    else if(mood &amp;gt; 5)&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;okay.\n&amp;quot;;&lt;br /&gt;
    else&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;happy.\n&amp;quot;;&lt;br /&gt;
    PassTime();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Critter::Eat(int food)&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Brruppp.\n&amp;quot;;&lt;br /&gt;
    m_Hunger -= food;&lt;br /&gt;
    if(m_Hunger &amp;lt; 0)&lt;br /&gt;
        m_Hunger = 0;&lt;br /&gt;
    PassTime();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Critter::Play(int fun)&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Wheee!\n&amp;quot;;&lt;br /&gt;
    m_Boredom -= fun;&lt;br /&gt;
    if(m_Boredom &amp;lt; 0)&lt;br /&gt;
        m_Boredom = 0;&lt;br /&gt;
    Passtime();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    Critter crit;&lt;br /&gt;
    crit.Talk();&lt;br /&gt;
&lt;br /&gt;
    int choice;&lt;br /&gt;
    do {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nCritter Caretaker\n\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;0 - Quit\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;1 - Listen to your critter\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;2 - Feed your critter\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;3 - Play with your critter\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Choice: &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; choice;&lt;br /&gt;
&lt;br /&gt;
        switch(choice) {&lt;br /&gt;
        case 0:&lt;br /&gt;
            cout &amp;lt;&amp;lt; &amp;quot;Good-bye.\n&amp;quot;;&lt;br /&gt;
        break;&lt;br /&gt;
        case 1:&lt;br /&gt;
            crit.Talk();&lt;br /&gt;
            break;&lt;br /&gt;
        case 2:&lt;br /&gt;
            crit.Eat();&lt;br /&gt;
            break;&lt;br /&gt;
        case 3:&lt;br /&gt;
            crit.Play();&lt;br /&gt;
            break;&lt;br /&gt;
        default:&lt;br /&gt;
            cout &amp;lt;&amp;lt; &amp;quot;\nSorry, but &amp;quot; &amp;lt;&amp;lt; choice &amp;lt;&amp;lt; &amp;quot; isn't a valid choice.\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    } while(choice != 0);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 다마고찌같은 게임들은 거의 이런식이다.&lt;br /&gt;
=== Critter Farm ===&lt;br /&gt;
* 좀 더 키워보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* critter_farm.cc */&lt;br /&gt;
// Critter Farm&lt;br /&gt;
// Demonstrates object containment&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Critter&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Critter(const string&amp;amp; name = &amp;quot;&amp;quot;): m_Name(name) {}&lt;br /&gt;
    string GetName() const { return m_Name; }&lt;br /&gt;
private:&lt;br /&gt;
    string m_Name;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Farm&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Farm(int spaces = 1) { m_Critters.reserve(spaces); }&lt;br /&gt;
    void Add(const Critter&amp;amp; aCritter) { m_Critters.push_back(aCritter); }&lt;br /&gt;
    void RollCall() const&lt;br /&gt;
    {&lt;br /&gt;
        for(vector&amp;lt;Critter&amp;gt;::const_iterator iter = m_Critters.begin(); iter != m_Critters.end(); ++iter)&lt;br /&gt;
            cout &amp;lt;&amp;lt; iter-&amp;gt;GetName() &amp;lt;&amp;lt; &amp;quot; here.\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
private:&lt;br /&gt;
    vector&amp;lt;Critter&amp;gt; m_Critters;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    Critter crit(&amp;quot;Poochie&amp;quot;);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;My critter's name is &amp;quot; &amp;lt;&amp;lt; crit.GetName() &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nCreating critter farm.\n&amp;quot;;&lt;br /&gt;
    Farm myFarm(3);&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nAdding three critters to the farm.\n&amp;quot;;&lt;br /&gt;
    myFarm.Add(Critter(&amp;quot;Moe&amp;quot;));&lt;br /&gt;
    myFarm.Add(Critter(&amp;quot;Larry&amp;quot;));&lt;br /&gt;
    myFarm.Add(Critter(&amp;quot;Curly&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nCalling Roll...\n&amp;quot;;&lt;br /&gt;
    myFarm.RollCall();&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 벡터를 쓰니 직관적이다.&lt;br /&gt;
=== Friend Critter ===&lt;br /&gt;
* Friend Class를 알아보기 위해 프로그램을 하나 작성해보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* friend_critter.cc */&lt;br /&gt;
// Friend Critter&lt;br /&gt;
// Demonstrates friend functions and operator overloading&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Critter&lt;br /&gt;
{&lt;br /&gt;
    // 전역함수는 Critter의 friend class&lt;br /&gt;
    friend void Peek(const Critter&amp;amp; aCritter);&lt;br /&gt;
    friend void ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp; os, const Critter&amp;amp; aCritter);&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
    Critter(const string&amp;amp; name = &amp;quot;&amp;quot;): m_name(name) {}&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    string m_Name;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void Peek(const Critter&amp;amp; aCritter);&lt;br /&gt;
ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp; os, const Critter&amp;amp; aCritter);&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    Critter crit(&amp;quot;Pochie&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Calling Peek() to access crit's private data member, m_Name: \n&amp;quot;;&lt;br /&gt;
    Peek(crit);&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nSending crit object to cout with the &amp;lt;&amp;lt; operator:\n&amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; crit;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 전역 friend 함수는 Critter object의 멤버를 직접 참조할 수 있다.&lt;br /&gt;
void Peek(const Critter&amp;amp; aCritter)&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; aCritter.m_Name &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 전역 friend 함수는 Critter object의 멤버를 직접 참조할 수 있다.&lt;br /&gt;
// &amp;lt;&amp;lt; 연산자로 cout에 Critter object의 내용을 전달할 수 있다.&lt;br /&gt;
ostream&amp;amp; operator &amp;lt;&amp;lt; (ostream&amp;amp; os, const Critter&amp;amp; aCritter)&lt;br /&gt;
{&lt;br /&gt;
    os &amp;lt;&amp;lt; &amp;quot;Critter Object - &amp;quot;;&lt;br /&gt;
    os &amp;lt;&amp;lt; &amp;quot;m_Name: &amp;quot; &amp;lt;&amp;lt; aCritter.m_Name;&lt;br /&gt;
    return os;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 점점 고급 기법을 사용할수록 이해하기 힘들다.&lt;br /&gt;
=== Heap ===&lt;br /&gt;
* 동적 할당에 대해 알아보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* heap.cc */&lt;br /&gt;
// Heap&lt;br /&gt;
// Demonstrates dynamically allocating memory&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int* intOnHeap(); // int형 변수를 힙에 올려 반환&lt;br /&gt;
void leak1(); // 메모리 누수를 만든다.&lt;br /&gt;
void leak2(); // 다른 메모리 누수를 만든다.&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    int* pHeap = new int;&lt;br /&gt;
    *pHeap = 10;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;*pHeap: &amp;quot; &amp;lt;&amp;lt; *pHeap &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    int* pHeap2 = intOnHeap();&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;*pHeap2: &amp;quot; &amp;lt;&amp;lt; *pHeap2 &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Freeing memory pointed to by pHeap.\n\n&amp;quot;;&lt;br /&gt;
    delete pHeap;&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Freeing memory pointed to by pHeap2.\n\n&amp;quot;;&lt;br /&gt;
    delete pHeap;&lt;br /&gt;
&lt;br /&gt;
    // 애매한 포인터를 지운다.&lt;br /&gt;
    pHeap = 0;&lt;br /&gt;
    pHeap2 = 0;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int* intOnHeap()&lt;br /&gt;
{&lt;br /&gt;
    int* pTemp = new int(20);&lt;br /&gt;
    return pTemp;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void leak1()&lt;br /&gt;
{&lt;br /&gt;
    int* drip1 = new int(30);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void leak2()&lt;br /&gt;
{&lt;br /&gt;
    int* drip2 = new int(50);&lt;br /&gt;
    drip2 = new int(100);&lt;br /&gt;
    delete drip2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 바로 이게 c 계열이 &amp;lt;s&amp;gt;좆같다고&amp;lt;/s&amp;gt;힘들다고 하는 메모리관리다.&lt;br /&gt;
* 왜냐하면 메모리 누수 죽어라 많이 일어나거든.&lt;br /&gt;
=== Heap Data Member ===&lt;br /&gt;
* 멤버를 동적할당해보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* heap_data_member.cc */&lt;br /&gt;
// Heap Data Member&lt;br /&gt;
// Demonstrates an object with a dynamically allocated data member&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Critter&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Critter(const string&amp;amp; name = &amp;quot;&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Constructor called\n&amp;quot;;&lt;br /&gt;
        m_pName = new string(name);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ~Critter() // 소멸자&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Destructor called\n&amp;quot;;&lt;br /&gt;
        delete m_pName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Critter(const Critter&amp;amp; c) // 복사 생성자&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Copy Constructor called\n&amp;quot;;&lt;br /&gt;
        m_pName = new string;&lt;br /&gt;
        *m_pName = c.GetName();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Critter&amp;amp; operator=(const Critter&amp;amp; c) // 연산자 지정 오버로드&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot; Overloaded Assignment Operator called\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        if(this == &amp;amp;c)&lt;br /&gt;
        {&lt;br /&gt;
            return *this;&lt;br /&gt;
        } else {&lt;br /&gt;
            *m_pName = c.GetName();&lt;br /&gt;
            return *this;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    string GetName() const { return *m_pName; }&lt;br /&gt;
    void SetName(const string&amp;amp; name = &amp;quot;&amp;quot;) { *m_pName = name; }&lt;br /&gt;
    void SayHi() const { cout &amp;lt;&amp;lt; &amp;quot;Hi, my name is &amp;quot; &amp;lt;&amp;lt; GetName() &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;; }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    string* m_pName;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void testDestructor();&lt;br /&gt;
void testCopyConstructor(Critter copy);&lt;br /&gt;
void testAssignmentOp();&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    testDestructor();&lt;br /&gt;
    cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    Critter crit(&amp;quot;Poochie&amp;quot;);&lt;br /&gt;
    crit.SayHi();&lt;br /&gt;
    testCopyConstructor(crit);&lt;br /&gt;
    cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    testAssignmentOp();&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testDestructor()&lt;br /&gt;
{&lt;br /&gt;
    Critter crit(&amp;quot;Rover&amp;quot;);&lt;br /&gt;
    crit.SayHi();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 값으로 받은 object를 복사 생성자로 invoke&lt;br /&gt;
void testCopyConstructor(Critter copy)&lt;br /&gt;
{&lt;br /&gt;
    copy.SayHi();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testAssignmentOp()&lt;br /&gt;
{&lt;br /&gt;
    Critter crit1(&amp;quot;crit1&amp;quot;);&lt;br /&gt;
    Critter crit2(&amp;quot;crit2&amp;quot;);&lt;br /&gt;
    crit1 = crit2;&lt;br /&gt;
    crit1.SayHi();&lt;br /&gt;
    crit2.SayHi();&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Setting name of crit1 back to 'crit1'\n&amp;quot;;&lt;br /&gt;
    crit1.SetName(&amp;quot;crit1&amp;quot;);&lt;br /&gt;
    crit1.SayHi();&lt;br /&gt;
    crit2.SayHi();&lt;br /&gt;
&lt;br /&gt;
    Critter crit(&amp;quot;crit&amp;quot;);&lt;br /&gt;
    crit = crit;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 더럽게 짜증나는거 다 안다.&amp;lt;s&amp;gt;왜냐하면 나도 쓰면서 짜증났거든&amp;lt;/s&amp;gt;&lt;br /&gt;
=== Game Lobby ===&lt;br /&gt;
* 온라인 게임에서 대기실같은게 있을 수 있다.&lt;br /&gt;
* [[Starcraft]]같은거 해봤으면 다들 알거임.&lt;br /&gt;
* 간략하게 기반을 잡아보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* game_lobby.cc */&lt;br /&gt;
// Game Lobby&lt;br /&gt;
// Simulates a game lobby where players wait&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Player&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Player(const string&amp;amp; name = &amp;quot;&amp;quot;): m_Name(name), m_pNext(0) {}&lt;br /&gt;
    string GetName() const { return m_Name; }&lt;br /&gt;
    Player* GetNext() const { return m_pNext; }&lt;br /&gt;
    void SetNext(Player* next) { m_pNext = next; }&lt;br /&gt;
private:&lt;br /&gt;
    string m_Name;&lt;br /&gt;
    Player* m_pNext; // 리스트중에 다음 플레이어 포인팅&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Lobby&lt;br /&gt;
{&lt;br /&gt;
    friend ostream&amp;amp; operator &amp;lt;&amp;lt; (ostream&amp;amp; os, const Lobby&amp;amp; aLobby);&lt;br /&gt;
public:&lt;br /&gt;
    Lobby(): m_pHead() {}&lt;br /&gt;
    ~Lobby() { Clear(); }&lt;br /&gt;
    void AddPlayer();&lt;br /&gt;
    void RemovePlayer();&lt;br /&gt;
    void Clear();&lt;br /&gt;
private:&lt;br /&gt;
    Player* m_pHead;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void Lobby::AddPlayer()&lt;br /&gt;
{&lt;br /&gt;
    // 플레이어 노드 생성&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Please enter the name of the new player: &amp;quot;;&lt;br /&gt;
    string name;&lt;br /&gt;
    cin &amp;gt;&amp;gt; name;&lt;br /&gt;
    Player* pNewPlayer = new Player(name);&lt;br /&gt;
&lt;br /&gt;
    // 리스트가 비었으면 새 플레이어를 헤드로 설정&lt;br /&gt;
    if(m_pHead == 0)&lt;br /&gt;
    {&lt;br /&gt;
        m_pHead = pNewPlayer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 그게 아니면 맨 끝에 붙임&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        Player* pIter = m_pHead;&lt;br /&gt;
        while(pIter-&amp;gt;GetNext() != 0)&lt;br /&gt;
        {&lt;br /&gt;
            pIter = pIter-&amp;gt;GetNext();&lt;br /&gt;
        }&lt;br /&gt;
        pIter-&amp;gt;SetNext(pNewPlayer);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Lobby::RemovePlayer()&lt;br /&gt;
{&lt;br /&gt;
    if(m_pHead == 0)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;The game lobby is empty. No one to remove!\n&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
        Player* pTemp = m_pHead;&lt;br /&gt;
        m_pHead = m_pHead-&amp;gt;GetNext();&lt;br /&gt;
        delete pTemp;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Lobby::Clear()&lt;br /&gt;
{&lt;br /&gt;
    while(m_pHead != 0)&lt;br /&gt;
    {&lt;br /&gt;
        RemovePlayer();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ostream&amp;amp; operator &amp;lt;&amp;lt; (ostream&amp;amp; os, const Lobby&amp;amp; aLobby)&lt;br /&gt;
{&lt;br /&gt;
    Player* pIter = aLobby.m_pHead;&lt;br /&gt;
&lt;br /&gt;
    os &amp;lt;&amp;lt; &amp;quot;\nHere's who's in the game lobby:\n&amp;quot;;&lt;br /&gt;
    if(pIter == 0)&lt;br /&gt;
    {&lt;br /&gt;
        os &amp;lt;&amp;lt; &amp;quot;The lobby is empty.\n&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
        while(pIter != 0)&lt;br /&gt;
        {&lt;br /&gt;
            os &amp;lt;&amp;lt; pIter-&amp;gt;GetName() &amp;lt;&amp;lt; endl;&lt;br /&gt;
            pIter = pIter-&amp;gt;GetNext();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return os;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    Lobby myLobby;&lt;br /&gt;
    int choice;&lt;br /&gt;
&lt;br /&gt;
    do {&lt;br /&gt;
        cout &amp;lt;&amp;lt; myLobby;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nGAME LOBBY\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;0 - Exit the program.\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;1 - Add a player to the lobby.\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;2 - Remove a player from the lobby.\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;3 - Clear the lobby.\n&amp;quot;;&lt;br /&gt;
        cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &amp;quot;Enter choice: &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; choice;&lt;br /&gt;
&lt;br /&gt;
        switch(choice)&lt;br /&gt;
        {&lt;br /&gt;
            case 0: cout &amp;lt;&amp;lt; &amp;quot;Good-bye.\n&amp;quot;; break;&lt;br /&gt;
            case 1: myLobby.AddPlayer(); break;&lt;br /&gt;
            case 2: myLobby.RemovePlayer(); break;&lt;br /&gt;
            case 3: myLobby.Clear(); break;&lt;br /&gt;
            default: cout &amp;lt;&amp;lt; &amp;quot;That was not a valid choice.\n&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    } while(choice != 0);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 이런식으로 좀 신경써놓으면 나중에 기능 추가할때도 편하다.&lt;br /&gt;
=== Simple Boss ===&lt;br /&gt;
* 상속에 대해 알아보기 위한 프로그램을 하나 만들어보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* simple_boss.cc */&lt;br /&gt;
// Simple Boss&lt;br /&gt;
// Demonstrates inheritance&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Enemy&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    int m_Damage;&lt;br /&gt;
&lt;br /&gt;
    Enemy(): m_Damage(10) { }&lt;br /&gt;
&lt;br /&gt;
    void Attack() const {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Attack inflicts &amp;quot; &amp;lt;&amp;lt; m_Damage &amp;lt;&amp;lt; &amp;quot; damage points!\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Boss : public Enemy&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    int m_DamageMultiplier;&lt;br /&gt;
&lt;br /&gt;
    Boss(): m_DamageMultiplier(3) { }&lt;br /&gt;
&lt;br /&gt;
    void SpecialAttack() const&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Special Attack inflicts &amp;quot; &amp;lt;&amp;lt; (m_DamageMultiplier * m_Damage);&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot; damage points!\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Creating an enemy.\n&amp;quot;;&lt;br /&gt;
    Enemy enemy1;&lt;br /&gt;
    enemy1.Attack();&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nCreating a boss.\n&amp;quot;;&lt;br /&gt;
    Boss boss1;&lt;br /&gt;
    boss1.Attack();&lt;br /&gt;
    boss1.SpecialAttack();&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 좀 더 알아보기 위해 프로그램을 향상시켜보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* simple_boss2.cc */&lt;br /&gt;
// simple Boss 2.0&lt;br /&gt;
// Demonstrates access control under inheritance&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Enemy&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Enemy(): m_Damage(10) { }&lt;br /&gt;
&lt;br /&gt;
    void Attack() const {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Attack inflicts &amp;quot; &amp;lt;&amp;lt; m_Damage &amp;lt;&amp;lt; &amp;quot; damage points!\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
    int m_Damage;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Boss : public Enemy&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Boss(): m_DamageMultiplier(3) { }&lt;br /&gt;
&lt;br /&gt;
    void SpecialAttack() const {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Special Attack inflicts &amp;quot; &amp;lt;&amp;lt; (m_DamageMultiplier * m_Damage);&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot; damage points!\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    int m_DamageMultiplier;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Creating an enemy.\n&amp;quot;;&lt;br /&gt;
    Enemy enemy1;&lt;br /&gt;
    enemy1.Attack();&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nCreating a boss.\n&amp;quot;;&lt;br /&gt;
    Boss boss1;&lt;br /&gt;
    boss1.Attack();&lt;br /&gt;
    boss1.SpecialAttack();&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Protected에 대해서 좀 알았을거당&lt;br /&gt;
* Overriding을 봅시다.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* overriding_boss.cc */&lt;br /&gt;
// Overriding Boss&lt;br /&gt;
// Demonstrates calling and overriding base member functions&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Enemy&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Enemy(int damage = 10): m_Damage(damage) { }&lt;br /&gt;
    void Taunt() const {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;The enemy says he will fight you.\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    void Attack() const {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Attack! Inflicts &amp;quot; &amp;lt;&amp;lt; m_Damage &amp;lt;&amp;lt; &amp;quot; damage points.&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    int m_Damage;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Boss : public Enemy&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Boss(int damage = 30): Enemy(damage) { } // 기본 생성자에 인자를 주고 호출&lt;br /&gt;
    void Taunt() const {&lt;br /&gt;
        Enemy::Attack();&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot; And laughs heartily at you.\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Creating an enemy.\n&amp;quot;;&lt;br /&gt;
    Enemy enemy1;&lt;br /&gt;
    enemy1.Taunt();&lt;br /&gt;
    enemy1.Attack();&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\n\nCreating a boss.\n&amp;quot;;&lt;br /&gt;
    Boss boss1;&lt;br /&gt;
    boss1.Taunt();&lt;br /&gt;
    boss1.Attack();&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 크게 달라보이는게 없당&lt;br /&gt;
* Virtual Member에 대해서 알아보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* virtual_boss.cc */&lt;br /&gt;
// Virtual Boss&lt;br /&gt;
// Demonstrates virtual functions&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Enemy {&lt;br /&gt;
public:&lt;br /&gt;
    Enemy(int damage = 10) {&lt;br /&gt;
        m_pDamage = new int(damage);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    virtual ~Enemy()&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;m_pDamage deleted\n&amp;quot;;&lt;br /&gt;
        delete m_pDamage;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    void Taunt() const {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;The enemy says he will fight you.\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    void virtual VTaunt() const {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;The enemy says he will fight you.\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
    int* m_pDamage;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Boss : public Enemy {&lt;br /&gt;
public:&lt;br /&gt;
    Boss(int multiplier = 3) {&lt;br /&gt;
        m_pDamageMultiplier = new int(multiplier);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    virtual ~Boss() {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;m_pDamageMultiplier deleted\n&amp;quot;;&lt;br /&gt;
        delete m_pDamageMultiplier;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    void Taunt() const {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;The boss says he will end your pitiful existence.\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    void virtual VTaunt() const {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;The boss says he will end your pitiful existence.\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
    int* m_pDamageMultiplier;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Pointer to Enemy that points to a Boss object:\n&amp;quot;;&lt;br /&gt;
    Enemy* pBadGuy = new Boss();&lt;br /&gt;
    pBadGuy-&amp;gt;Taunt();&lt;br /&gt;
    pBadGuy-&amp;gt;VTaunt();&lt;br /&gt;
&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nDeleting pointer to Enemy:\n&amp;quot;;&lt;br /&gt;
    delete pBadGuy;&lt;br /&gt;
    pBadGuy = 0;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 역시 Virtual 멤버도 그다지 달라보이는건 없다.&lt;br /&gt;
=== Abstract Creature ===&lt;br /&gt;
* 추상화라고들 이야기하는것에 대해 알아보도록 하자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* abstract creature */&lt;br /&gt;
// Abstract Creature&lt;br /&gt;
// Demonstrates abstract classes&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Creature // Abstract class&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Creature(int health = 100): m_Health(health) { }&lt;br /&gt;
    virtual void Greet() const = 0; // 순수한 virtual 멤버 함수&lt;br /&gt;
    virtual void DisplayHealth() const {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Health: &amp;quot; &amp;lt;&amp;lt; m_Health &amp;lt;&amp;lt; endl;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
    int m_Health;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Orc : public Creature {&lt;br /&gt;
public:&lt;br /&gt;
    Orc(int health = 120); Creature(health) { }&lt;br /&gt;
    virtual void Greet() const {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;The orc grunts hello.\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    Creature* pCreature = new Orc();&lt;br /&gt;
    pCreature-&amp;gt;Greet();&lt;br /&gt;
    pCreature-&amp;gt;DisplayHealth();&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 계속 진행될수록 메인함수는 작아지는것 같은 느낌인데?&lt;br /&gt;
=== Critter Project ===&lt;br /&gt;
* 파일을 나눠보자.&lt;br /&gt;
* 아래는 지금까지처럼의 소스코드&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Critter&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    void Greet();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void Critter::Greet()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Hi, I'm a critter.\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Instantiating a Critter object.\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    Critter crit;&lt;br /&gt;
    crit.Greet();&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 요걸 세개로 나눌거다.&lt;br /&gt;
# Header file - Critter class의 정의만.&lt;br /&gt;
# Implementation file - Critter class의 내용.&lt;br /&gt;
# Application file - Critter class를 사용하는 main()&lt;br /&gt;
* 아래는 헤더&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* critter.h */&lt;br /&gt;
// Header&lt;br /&gt;
#ifndef CRITTER_H&lt;br /&gt;
#define CRITTER_H&lt;br /&gt;
&lt;br /&gt;
class Critter&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    void Greet();&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 나중에 엄청 많은 include가 있을 경우 중복 선언을 방지하기 위한 디파인이다.&lt;br /&gt;
* 아래는 구현&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* critter.cc */&lt;br /&gt;
// Implementation file&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;istream&amp;gt;&lt;br /&gt;
#include &amp;quot;critter.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
void Critter::Greet()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Hi. I'm a critter.\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 헤더 참조를 하게 했다는것 외에 별다를건 없다.&lt;br /&gt;
* 아래는 어플리케이션&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* critter_app.cc */&lt;br /&gt;
// Application file&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;critter.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Instantiating a Critter object.\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    Critter crit;&lt;br /&gt;
    crit.Greet();&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 파일 안 나누고 그냥 통짜로 하면 되지 않을까 하는데, c++을 포함한 객체지향 프로그래밍 언어들은 통짜로 짜면 일단 본인이 '내가 뭘 했는지' 까먹게 되고, 유지보수도 잘 안 되는 경향이 있다.&lt;br /&gt;
* 짧은 프로그램에서는 별 차이 안 나지만, 파일별로 기능정리를 한다던가 하면 좀 더 집중할 수 있는 편이다.&lt;br /&gt;
* 그리고, 보통 클래스를 사용하는 경우 협업이라고 하고 혼자 기능 하나를 만든다는 샌드박스 개념으로 협업을 하게 된다.&lt;br /&gt;
* 테스트 역시 클래스 단위로 이루어진다면 어떤 기능이 부족하더라도 dummy를 만들어 돌릴 수 있으니, 평생 혼자&amp;lt;s&amp;gt;여자친구도 없이&amp;lt;/s&amp;gt; 모든 프로그래밍을 하지 않을거면 파일 관리를 좀 해보는게 좋다.&lt;br /&gt;
=== Blackjack ===&lt;br /&gt;
* 블랙잭은 다음과 같은 순서로 진행된다.&lt;br /&gt;
# 플레이어와 하우스는 각 두장의 초기 카드를 받는다.&lt;br /&gt;
# 하우스의 첫카드는 히든&lt;br /&gt;
# 플레이어와 하우스의 카드를 보여준다.&lt;br /&gt;
# 플레이어가 카드를 더 받을건지 결정한다.&lt;br /&gt;
# 하우스가 카드를 깐다&lt;br /&gt;
# 하우스가 카드를 더 받을건지 결정한다.&lt;br /&gt;
# 만약 하우스가 버스트하면&lt;br /&gt;
## 버스트 안한 플레이어 전부 승리&lt;br /&gt;
# 그렇지 않으려면&lt;br /&gt;
## 각각 플레이어가&lt;br /&gt;
### 플레이어가 버스트하지 않았다면&lt;br /&gt;
#### 플레이어가 하우스보다 수가 높으면 플레이어 승리&lt;br /&gt;
#### 그렇지 않고 플레이어보다 하우스가 높으면 플레이어 패배&lt;br /&gt;
#### 숫자가 같으면 플레이어 푸시&lt;br /&gt;
# 카드 모두 회수&lt;br /&gt;
* 자, 그럼 시작해볼까&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// Blackjack&lt;br /&gt;
// Plays a simple version of the casino game of blackjac; for 1 - 7 players&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;algorithm&amp;gt;&lt;br /&gt;
#include &amp;lt;ctime&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
class Card&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    enum rank { ACE = 1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING };&lt;br /&gt;
    enum suit { CLUBS, DIAMONDS, HEARTS, SPADES };&lt;br /&gt;
&lt;br /&gt;
    // &amp;lt;&amp;lt; 연산자 오버로딩은 카드 오브젝트를 표준출력으로 내보낸다.&lt;br /&gt;
    friend ostream&amp;amp; operator &amp;lt;&amp;lt; (ostream&amp;amp; os, const Card&amp;amp; aCard);&lt;br /&gt;
&lt;br /&gt;
    Card(rank r = ACE, suit s = SPADES, bool ifu = true);&lt;br /&gt;
&lt;br /&gt;
    // 카드의 상태 반환, 1 - 11&lt;br /&gt;
    int GetValue() const;&lt;br /&gt;
&lt;br /&gt;
    // 카드 뒤집기; 정면이든 아니든 같아야 한다.&lt;br /&gt;
    void Flip();&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    rank m_Rank;&lt;br /&gt;
    suit m_Suit;&lt;br /&gt;
    bool m_IsFaceUp;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Card::Card(rank r, suit s, bool ifu): m_Rank(r), m_Suit(s), m_IsFaceUp(ifu)&lt;br /&gt;
{ }&lt;br /&gt;
&lt;br /&gt;
int Card::GetValue() const {&lt;br /&gt;
    // card가 뒤집혀 있으면 0&lt;br /&gt;
    int value = 0;&lt;br /&gt;
    if(m_IsFaceUp)&lt;br /&gt;
    {&lt;br /&gt;
        // 카드의 내용이 value&lt;br /&gt;
        value = m_Rank;&lt;br /&gt;
        // value가 10보다 클 수 없음&lt;br /&gt;
        if(value &amp;gt; 10)&lt;br /&gt;
            value = 10;&lt;br /&gt;
    }&lt;br /&gt;
    return value;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Card::Flip()&lt;br /&gt;
{&lt;br /&gt;
    m_IsFaceUp = !(m_IsFaceUp);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Hand&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Hand();&lt;br /&gt;
&lt;br /&gt;
    virtual ~Hand();&lt;br /&gt;
&lt;br /&gt;
    // 카드 추가&lt;br /&gt;
    void Add(Card* pCard);&lt;br /&gt;
&lt;br /&gt;
    // 카드 회수&lt;br /&gt;
    void Clear();&lt;br /&gt;
&lt;br /&gt;
    // 카드의 값을 구한다. ace는 1이나 11이 될 수 있는데 그걸 판단해줘야 한다.&lt;br /&gt;
    int GetTotal() const;&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
    vector&amp;lt;Card*&amp;gt; m_Cards;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Hand::Hand()&lt;br /&gt;
{&lt;br /&gt;
    m_Cards.reserve(7);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Hand::~Hand() // 클래스 바깥에서 쓸땐 virtual을 빼야함&lt;br /&gt;
{&lt;br /&gt;
    Clear();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Hand::Add(Card* pCard)&lt;br /&gt;
{&lt;br /&gt;
    m_Cards.push_back(pCard);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Hand::Clear()&lt;br /&gt;
{&lt;br /&gt;
    // 처음부터 끝까지 반복하면서 벡터의 내용을 지운다. 힙의 메모리를 전부 반환한다.&lt;br /&gt;
    vector&amp;lt;Card*&amp;gt;::iterator iter = m_Cards.begin();&lt;br /&gt;
    for(iter = m_Cards.begin(); iter != m_Cards.end(); ++iter)&lt;br /&gt;
    {&lt;br /&gt;
        delete *iter;&lt;br /&gt;
        *iter = 0;&lt;br /&gt;
    }&lt;br /&gt;
    // 벡터 포인터도 클리어한다.&lt;br /&gt;
    m_Cards.clear();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int Hand::GetTotal() const {&lt;br /&gt;
    // 카드가 없으면 0 반환&lt;br /&gt;
    if(m_Cards.empty())&lt;br /&gt;
        return 0;&lt;br /&gt;
&lt;br /&gt;
    // 첫카드가 0이면 카드는 뒤집힌 상태이므로 0 반환&lt;br /&gt;
    if(m_Cards[0]-&amp;gt;GetValue() == 0)&lt;br /&gt;
        return 0;&lt;br /&gt;
&lt;br /&gt;
    // 카드 추가, 각 ace는 1로 취급&lt;br /&gt;
    int total = 0;&lt;br /&gt;
    vector&amp;lt;Card*&amp;gt;::const_iterator iter;&lt;br /&gt;
    for(iter = m_Cards.begin(); iter !=m_Cards.end(); ++iter)&lt;br /&gt;
        total += (*iter)-&amp;gt;GetValue();&lt;br /&gt;
&lt;br /&gt;
    // 만약 카드에 ace가 포함돼 있으면 ace를 결정&lt;br /&gt;
    bool containsAce = false;&lt;br /&gt;
    for(iter = m_Cards.begin(); iter != m_Cards.end(); ++iter)&lt;br /&gt;
        if((*iter)-&amp;gt;GetValue() == Card::ACE)&lt;br /&gt;
            containsAce = true;&lt;br /&gt;
&lt;br /&gt;
    // 만약 ace가 있고 토탈이 10보다 작으면 ace를 11로&lt;br /&gt;
    if(containsAce &amp;amp;&amp;amp; total &amp;lt;= 11)&lt;br /&gt;
    // 전에 ace를 1 추가했으니, 10만 더 추가하면 된다.&lt;br /&gt;
    total += 10;&lt;br /&gt;
&lt;br /&gt;
    return total;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class GenericPlayer : public Hand {&lt;br /&gt;
    friend ostream&amp;amp; operator &amp;lt;&amp;lt; (ostream&amp;amp; os, const GenericPlayer&amp;amp; aGenericPlayer);&lt;br /&gt;
public:&lt;br /&gt;
    GenericPlayer(const string&amp;amp; name = &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    virtual ~GenericPlayer();&lt;br /&gt;
&lt;br /&gt;
    // 플레이어가 힛을 하는지 나타내는 값&lt;br /&gt;
    virtual bool IsHitting() const = 0;&lt;br /&gt;
&lt;br /&gt;
    // 플레이어가 버스트했는지 나타내는 값 - 버스트는 카드의 총합이 21이 넘는 경우.&lt;br /&gt;
    bool IsBusted() const;&lt;br /&gt;
&lt;br /&gt;
    // 버스트했다는걸 표시해주는 함수&lt;br /&gt;
    void Bust() const;&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
    string m_Name;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
GenericPlayer::GenericPlayer(const string&amp;amp; name) : m_Name(name)&lt;br /&gt;
{ }&lt;br /&gt;
&lt;br /&gt;
GenericPlayer::~GenericPlayer()&lt;br /&gt;
{ }&lt;br /&gt;
&lt;br /&gt;
bool GenericPlayer::IsBusted() const&lt;br /&gt;
{&lt;br /&gt;
    return (GetTotal() &amp;gt; 21);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GenericPlayer::Bust() const&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; m_Name &amp;lt;&amp;lt; &amp;quot; busts.\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Player : public GenericPlayer&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Player(const string&amp;amp; name = &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    virtual ~Player();&lt;br /&gt;
&lt;br /&gt;
    // 플레이어가 힛할지 안할건지 리턴&lt;br /&gt;
    virtual bool IsHitting() const;&lt;br /&gt;
&lt;br /&gt;
    // 플레이어가 이겼음을 표시&lt;br /&gt;
    void Win() const;&lt;br /&gt;
&lt;br /&gt;
    // 플레이어가 졌음을 표시&lt;br /&gt;
    void Lose() const;&lt;br /&gt;
&lt;br /&gt;
    // 플레이어 푸시를 표시&lt;br /&gt;
    void Push() const;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Player::Player(const string&amp;amp; name) : GenericPlayer(name)&lt;br /&gt;
{ }&lt;br /&gt;
&lt;br /&gt;
Player::~Player()&lt;br /&gt;
{ }&lt;br /&gt;
&lt;br /&gt;
bool Player::IsHitting() const&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; m_Name &amp;lt;&amp;lt; &amp;quot;, do you want a hit? (Y/N): &amp;quot;;&lt;br /&gt;
    char response;&lt;br /&gt;
    cin &amp;gt;&amp;gt; response;&lt;br /&gt;
    return (response == 'y' || response == 'Y');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Player::Win() const {&lt;br /&gt;
    cout &amp;lt;&amp;lt; m_Name &amp;lt;&amp;lt; &amp;quot; wins.\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Player::Lose() const {&lt;br /&gt;
    cout &amp;lt;&amp;lt; m_Name &amp;lt;&amp;lt; &amp;quot; loses.\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Player::Push() const {&lt;br /&gt;
    cout &amp;lt;&amp;lt; m_Name &amp;lt;&amp;lt; &amp;quot; pushes.\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class House : public GenericPlayer&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    House(const string&amp;amp; name = &amp;quot;House&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    virtual ~House();&lt;br /&gt;
&lt;br /&gt;
    // 하우스가 힛하는걸 표현 - 카드 토탈이 16이거나 작으면 무조건 힛&lt;br /&gt;
    virtual bool IsHitting() const;&lt;br /&gt;
&lt;br /&gt;
    // 첫장 뒤집기&lt;br /&gt;
    void FlipFirstCard();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
House::House(const string&amp;amp; name) : GenericPlayer(name)&lt;br /&gt;
{ }&lt;br /&gt;
&lt;br /&gt;
House::~House()&lt;br /&gt;
{ }&lt;br /&gt;
&lt;br /&gt;
bool House::IsHitting() const {&lt;br /&gt;
    return (GetTotal() &amp;lt;= 16);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void House::FlipFirstCard()&lt;br /&gt;
{&lt;br /&gt;
    if(!(m_Cards.empty()))&lt;br /&gt;
        m_Cards[0]-&amp;gt;Flip();&lt;br /&gt;
    else cout &amp;lt;&amp;lt; &amp;quot;No card to flip!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Deck : public Hand&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Deck();&lt;br /&gt;
    virtual ~Deck();&lt;br /&gt;
&lt;br /&gt;
    // 52장 카드로 표준 덱을 만듦&lt;br /&gt;
    void Populate();&lt;br /&gt;
&lt;br /&gt;
    // 카드 섞기&lt;br /&gt;
    void Shuffle();&lt;br /&gt;
&lt;br /&gt;
    // 카드 딜링&lt;br /&gt;
    void Deal(Hand&amp;amp; aHand);&lt;br /&gt;
&lt;br /&gt;
    // 추가 카드를 일반 플레이어에게 딜링&lt;br /&gt;
    void AdditionalCards(GenericPlayer&amp;amp; aGenericPlayer);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Deck::Deck() {&lt;br /&gt;
    m_Cards.reserve(52);&lt;br /&gt;
    Populate();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Deck::~Deck() { }&lt;br /&gt;
&lt;br /&gt;
void Deck::Populate() {&lt;br /&gt;
    Clear();&lt;br /&gt;
    // 스탠다드 덱을 만듦&lt;br /&gt;
    for(int s = Card::CLUBS; s &amp;lt;= Card::SPADES; ++s)&lt;br /&gt;
        for(int r = Card::ACE; r &amp;lt; Card::KING; ++r)&lt;br /&gt;
            Add(new Card(static_cast&amp;lt;Card::rank&amp;gt;(r), static_cast&amp;lt;Card::suit&amp;gt;(s)));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Deck::Shuffle() {&lt;br /&gt;
    random_shuffle(m_Cards.begin(), m_Cards.end());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Deck::Deal(Hand&amp;amp; aHand) {&lt;br /&gt;
    if(!m_Cards.empty()) {&lt;br /&gt;
        aHand.Add(m_Cards.back());&lt;br /&gt;
        m_Cards.pop_back();&lt;br /&gt;
    } else {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Out of cards. Unable to deal.&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Deck::AdditionalCards(GenericPlayer&amp;amp; aGenericPlayer)&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
    // 플레이어가 버스트하지 않고 힛을 하면 카드를 딜링한다.&lt;br /&gt;
    while(!(aGenericPlayer.IsBusted()) &amp;amp;&amp;amp; aGenericPlayer.IsHitting()) {&lt;br /&gt;
        Deal(aGenericPlayer);&lt;br /&gt;
        cout &amp;lt;&amp;lt; aGenericPlayer &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
        if(aGenericPlayer.IsBusted())&lt;br /&gt;
            aGenericPlayer.Bust();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Game&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Game(const vector&amp;lt;string&amp;gt;&amp;amp; names);&lt;br /&gt;
&lt;br /&gt;
    ~Game();&lt;br /&gt;
&lt;br /&gt;
    // 게임 플레이!&lt;br /&gt;
    void Play();&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    Deck m_Deck;&lt;br /&gt;
    House m_House;&lt;br /&gt;
    vector&amp;lt;Player&amp;gt; m_Players;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Game::Game(const vector&amp;lt;string&amp;gt;&amp;amp; names)&lt;br /&gt;
{&lt;br /&gt;
    // 플레이어 이름으로 벡터를 만든다.&lt;br /&gt;
    vector&amp;lt;string&amp;gt;::const_iterator pName;&lt;br /&gt;
    for(pName = names.begin(); pName != names.end(); ++pName)&lt;br /&gt;
        m_Players.push_back(Player(*pName));&lt;br /&gt;
&lt;br /&gt;
    srand(time(0));&lt;br /&gt;
    m_Deck.Populate();&lt;br /&gt;
    m_Deck.Shuffle();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Game::~Game() { }&lt;br /&gt;
&lt;br /&gt;
void Game::Play() {&lt;br /&gt;
    // 초기카드 2장을 모두에게 딜링&lt;br /&gt;
    vector&amp;lt;Player&amp;gt;::iterator pPlayer;&lt;br /&gt;
    for(int i = 0; i &amp;lt; 2; ++i)&lt;br /&gt;
    {&lt;br /&gt;
        for(pPlayer = m_Players.begin(); pPlayer != m_Players.end(); ++pPlayer)&lt;br /&gt;
            m_Deck.Deal(*pPlayer);&lt;br /&gt;
        m_Deck.Deal(m_House);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 하우스의 첫 카드는 히든&lt;br /&gt;
    m_House.FlipFirstCard();&lt;br /&gt;
&lt;br /&gt;
    // 모두의 카드를 표시&lt;br /&gt;
    for (pPlayer = m_Players.begin(); pPlayer != m_Players.end(); ++pPlayer)&lt;br /&gt;
        cout &amp;lt;&amp;lt; *pPlayer &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; m_House &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    // 추가카드를 플레이어들에게 딜링&lt;br /&gt;
        for(pPlayer = m_Players.begin(); pPlayer != m_Players.end(); ++pPlayer)&lt;br /&gt;
        m_Deck.AdditionalCards(*pPlayer);&lt;br /&gt;
&lt;br /&gt;
    // 하우스 히든 공개&lt;br /&gt;
    m_House.FlipFirstCard();&lt;br /&gt;
    cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; m_House;&lt;br /&gt;
&lt;br /&gt;
    // 하우스 카드 딜링&lt;br /&gt;
    m_Deck.AdditionalCards(m_House);&lt;br /&gt;
&lt;br /&gt;
    if(m_House.IsBusted())&lt;br /&gt;
    {&lt;br /&gt;
        // 버스트 안한 모든 플레이어 승리&lt;br /&gt;
        for(pPlayer = m_Players.begin(); pPlayer != m_Players.end(); ++pPlayer)&lt;br /&gt;
            if(!(pPlayer-&amp;gt;IsBusted()))&lt;br /&gt;
                pPlayer-&amp;gt;Win();&lt;br /&gt;
    } else {&lt;br /&gt;
        // 각각의 플레이어가 하우스를 이겼는지 확인&lt;br /&gt;
        for(pPlayer = m_Players.begin(); pPlayer != m_Players.end(); ++pPlayer)&lt;br /&gt;
            if(!(pPlayer-&amp;gt;IsBusted())) {&lt;br /&gt;
                if(pPlayer-&amp;gt;GetTotal() &amp;gt; m_House.GetTotal())&lt;br /&gt;
                    pPlayer-&amp;gt;Win();&lt;br /&gt;
                else if(pPlayer-&amp;gt;GetTotal() &amp;lt; m_House.GetTotal())&lt;br /&gt;
                    pPlayer-&amp;gt;Lose();&lt;br /&gt;
                else&lt;br /&gt;
                    pPlayer-&amp;gt;Push();&lt;br /&gt;
            }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 모든 카드 회수&lt;br /&gt;
    for(pPlayer = m_Players.begin(); pPlayer != m_Players.end(); ++pPlayer)&lt;br /&gt;
        pPlayer-&amp;gt;Clear();&lt;br /&gt;
    m_House.Clear();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 함수 프로토타입&lt;br /&gt;
ostream&amp;amp; operator &amp;lt;&amp;lt; (ostream&amp;amp; os, const Card&amp;amp; aCard);&lt;br /&gt;
ostream&amp;amp; operator &amp;lt;&amp;lt; (ostream&amp;amp; os, const GenericPlayer&amp;amp; aGenericPlayer);&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\t\tWelcome to Blackjack!\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    int numPlayers = 0;&lt;br /&gt;
    while(numPlayers &amp;lt; 1 || numPlayers &amp;gt; 7) {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;How many palyers? (1 - 7): &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; numPlayers;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    vector&amp;lt;string&amp;gt; names;&lt;br /&gt;
    string name;&lt;br /&gt;
    for(int i = 0; i &amp;lt; numPlayers; ++i)&lt;br /&gt;
    {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Enter player name: &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; name;&lt;br /&gt;
        names.push_back(name);&lt;br /&gt;
    }&lt;br /&gt;
    cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
&lt;br /&gt;
    // 게임 루프&lt;br /&gt;
    Game aGame(names);&lt;br /&gt;
    char again = 'y';&lt;br /&gt;
    while(again != 'n' &amp;amp;&amp;amp; again != 'N') {&lt;br /&gt;
        aGame.Play();&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;\nDo you want to play agin? (Y/N): &amp;quot;;&lt;br /&gt;
        cin &amp;gt;&amp;gt; again;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 카드 오브젝트에서 &amp;lt;&amp;lt; 연산자 오버로드&lt;br /&gt;
ostream&amp;amp; operator &amp;lt;&amp;lt; (ostream&amp;amp; os, const Card&amp;amp; aCard)&lt;br /&gt;
{&lt;br /&gt;
    const string RANKS[] = { &amp;quot;0&amp;quot;, &amp;quot;A&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;3&amp;quot;, &amp;quot;4&amp;quot;, &amp;quot;5&amp;quot;, &amp;quot;6&amp;quot;, &amp;quot;7&amp;quot;, &amp;quot;8&amp;quot;, &amp;quot;9&amp;quot;, &amp;quot;10&amp;quot;, &amp;quot;J&amp;quot;, &amp;quot;Q&amp;quot;, &amp;quot;K&amp;quot; };&lt;br /&gt;
    const string SUITS[] = { &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;h&amp;quot;, &amp;quot;s&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
    if(aCard.m_IsFaceUp)&lt;br /&gt;
        os &amp;lt;&amp;lt; RANKS[aCard.m_Rank] &amp;lt;&amp;lt; SUITS[aCard.m_Suit];&lt;br /&gt;
    else&lt;br /&gt;
        os &amp;lt;&amp;lt; &amp;quot;XX&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return os;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// 플레이어 오브젝트에서 &amp;lt;&amp;lt; 연산자 오버로드&lt;br /&gt;
ostream&amp;amp; operator &amp;lt;&amp;lt; (ostream&amp;amp; os, const GenericPlayer&amp;amp; aGenericPlayer)&lt;br /&gt;
{&lt;br /&gt;
    os &amp;lt;&amp;lt; aGenericPlayer.m_Name &amp;lt;&amp;lt; &amp;quot;:\t&amp;quot;;&lt;br /&gt;
    vector&amp;lt;Card*&amp;gt;::const_iterator pCard;&lt;br /&gt;
    if(!aGenericPlayer.m_Cards.empty())&lt;br /&gt;
    {&lt;br /&gt;
        for(pCard = aGenericPlayer.m_Cards.begin(); pCard != aGenericPlayer.m_Cards.end(); ++pCard)&lt;br /&gt;
            os &amp;lt;&amp;lt; *(*pCard) &amp;lt;&amp;lt; &amp;quot;\t&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        if(aGenericPlayer.GetTotal() != 0)&lt;br /&gt;
            cout &amp;lt;&amp;lt; &amp;quot;(&amp;quot; &amp;lt;&amp;lt; aGenericPlayer.GetTotal() &amp;lt;&amp;lt; &amp;quot;)&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
        os &amp;lt;&amp;lt; &amp;quot;&amp;lt;empty&amp;gt;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return os;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 블랙잭 정도는 껌인가?&lt;br /&gt;
== Multiplayer Game Programming ==&lt;br /&gt;
== SDL ==&lt;br /&gt;
* http://www.dreamincode.net/forums/topic/290187-linux-game-programming-tutorial-1-introduction-first-sdl/ 이쪽의 내용 번역&lt;br /&gt;
* Simple Directmedia Layer&amp;lt;s&amp;gt;웬지 DirectX를 연상시키지만, 웬지 플랫폼 인디펜던트하다&amp;lt;/s&amp;gt;&lt;br /&gt;
* 홈페이지는 http://www.libsdl.org&lt;br /&gt;
* 비디오, 오디오, 사용자 입력을 지원한다.&lt;br /&gt;
* 기본적으로 2D 그래픽 라이브러리를 지원하며, 3D는 OpenGL을 통해서 지원한다고 한다.&lt;br /&gt;
* 지원되는 플랫폼은 다음과 같다.&lt;br /&gt;
# Linux/X11&lt;br /&gt;
# Windows&lt;br /&gt;
# Windows CE&lt;br /&gt;
# Mac OSX&lt;br /&gt;
# iOS&lt;br /&gt;
# Android&lt;br /&gt;
* 사용되는 IDE&lt;br /&gt;
# Code::Blocks&lt;br /&gt;
# Visual C++&lt;br /&gt;
# Eclipse&lt;br /&gt;
* 라이센스는 LGPL이다.&lt;br /&gt;
# 자유롭게 상용프로그램 개발이 가능&lt;br /&gt;
# 상용으로 개발할 경우 SDL과 게임은 Dynamic Link되어야 함.&lt;br /&gt;
* 일단 간단하게 만들기에 짱좋은 라이브러리&lt;br /&gt;
=== 준비 ===&lt;br /&gt;
* 개발킷을 설치한다(다음은 데비안/우분투 기준)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo apt-get install libsdl1.2-dev&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 우분투에서는 [[우분투소프트웨어센터]]에서 검색해서 받는게 좋다.&lt;br /&gt;
* 만약 윈도우라면 Visual C++과 MinGW용 라이브러리가 있다.&lt;br /&gt;
=== Hello World ===&lt;br /&gt;
* 뭐든 헬로월드부터 찍어봐야지.. 안그래?&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* sdltest.c */&lt;br /&gt;
/*&lt;br /&gt;
    SDL Test&lt;br /&gt;
    Demonstrates SDL being initialized and shut down.&lt;br /&gt;
    written by Sayuri L. Kitsune (2012)&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
/* Includes */&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/* Main */&lt;br /&gt;
int main(int argn,char **argv)&lt;br /&gt;
{&lt;br /&gt;
    /* Init */&lt;br /&gt;
    if(SDL_Init(SDL_INIT_VIDEO) != 0)&lt;br /&gt;
        fprintf(stderr,&amp;quot;Could not initialize SDL: %s\n&amp;quot;,SDL_GetError()); /* Error? */&lt;br /&gt;
    printf(&amp;quot;SDL Initialized\n&amp;quot;);&lt;br /&gt;
    /* Exit */&lt;br /&gt;
    SDL_Quit();&lt;br /&gt;
    printf(&amp;quot;SDL Shutdown\n&amp;quot;);&lt;br /&gt;
    /* Done */&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 그럼 하던대로 컴파일을 해볼까!&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ gcc -c sdltest.c&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 으메, 헤더파일 없다고 나오네&lt;br /&gt;
* 헤더파일은 /usr/include/SDL에 있당&lt;br /&gt;
* 그러니까 이렇게&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ gcc -I&amp;quot;/usr/include/SDL&amp;quot; -c sdltest.c&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 자, 컴파일은 됐어.&lt;br /&gt;
* 이제 링크!&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ gcc -o sdltest sdltest.o&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 또 에러네? 젠장&lt;br /&gt;
* 라이브러리 링크해줘야함&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ gcc -o sdltest sdltest.o -lSDL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 그냥 한번에 다 할라면&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ gcc -o sdltest sdltest.c -I&amp;quot;/usr/include/SDL&amp;quot; -lSDL&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 실행해보면 그냥 초기화되고 꺼졌다는 메세지 나와&lt;br /&gt;
* 그럼 성공&lt;br /&gt;
=== SDL_PollEvent ===&lt;br /&gt;
* 그래도 화면 나오는게 보고 싶겠지.&lt;br /&gt;
* 화면 초기화하고 어떤 입력을 받는 루틴을 짜보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* demo.c */&lt;br /&gt;
/*&lt;br /&gt;
    SDL Video Demo&lt;br /&gt;
    demonstrates SDL's video working by moving dots around a screen&lt;br /&gt;
    written by Sayuri L. Kitsune (2012)&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
/* Includes */&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/* Globals */&lt;br /&gt;
SDL_Surface *demo_screen;&lt;br /&gt;
 &lt;br /&gt;
/* Main */&lt;br /&gt;
int main(int argn,char **argv)&lt;br /&gt;
{&lt;br /&gt;
    SDL_Event ev;&lt;br /&gt;
    int active;&lt;br /&gt;
    /* Initialize SDL */&lt;br /&gt;
    if(SDL_Init(SDL_INIT_VIDEO) != 0)&lt;br /&gt;
        fprintf(stderr,&amp;quot;Could not initialize SDL: %s\n&amp;quot;,SDL_GetError());&lt;br /&gt;
    /* Open main window */&lt;br /&gt;
    demo_screen = SDL_SetVideoMode(320,240,0,SDL_HWSURFACE|SDL_DOUBLEBUF);&lt;br /&gt;
    if(!demo_screen)&lt;br /&gt;
        fprintf(stderr,&amp;quot;Could not set video mode: %s\n&amp;quot;,SDL_GetError());&lt;br /&gt;
    /* Main loop */&lt;br /&gt;
    active = 1;&lt;br /&gt;
    while(active)&lt;br /&gt;
    {&lt;br /&gt;
        /* Handle events */&lt;br /&gt;
        while(SDL_PollEvent(&amp;amp;ev))&lt;br /&gt;
        {&lt;br /&gt;
            if(ev.type == SDL_QUIT)&lt;br /&gt;
                active = 0; /* End */&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    /* Exit */&lt;br /&gt;
    SDL_Quit();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 솔직히 옵션 넣어야 할게 좀 있고 귀찮으니 Makefile도 하나 만들자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
test:&lt;br /&gt;
    make build;&lt;br /&gt;
    ./demo;&lt;br /&gt;
 &lt;br /&gt;
build:&lt;br /&gt;
    gcc -I&amp;quot;/usr/include/SDL&amp;quot; -c demo.c;&lt;br /&gt;
    gcc demo.o -lSDL -o demo;&lt;br /&gt;
 &lt;br /&gt;
clean:&lt;br /&gt;
    -rm demo.o;&lt;br /&gt;
    -rm demo;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 창 하나가 뜬다.&lt;br /&gt;
=== SDL_app ===&lt;br /&gt;
* 간단하게 화면출력하는거 하나 만들어봅시다.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* sdl_app.c */&lt;br /&gt;
#include &amp;lt;SDL/SDL.h&amp;gt;&lt;br /&gt;
int main ( int argc, char** argv )&lt;br /&gt;
{&lt;br /&gt;
  SDL_Init(SDL_INIT_EVERYTHING);&lt;br /&gt;
  SDL_Surface* screen = SDL_SetVideoMode(320, 240, 16, SDL_SWSURFACE);&lt;br /&gt;
  SDL_Surface* bmp = SDL_LoadPNG(&amp;quot;back.png&amp;quot;);&lt;br /&gt;
  SDL_Rect dstrect; &lt;br /&gt;
  dstrect.x = 0; &lt;br /&gt;
  dstrect.y = 0;&lt;br /&gt;
  SDL_BlitSurface(bmp, NULL, screen, &amp;amp;dstrect);&lt;br /&gt;
  SDL_Flip(screen);&lt;br /&gt;
  SDL_Delay(5000);&lt;br /&gt;
  SDL_FreeSurface(bmp);&lt;br /&gt;
  SDL_FreeSurface(screen);&lt;br /&gt;
  SDL_Quit();&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
다음은 Makefile.sdl_app&lt;br /&gt;
&amp;lt;source lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
test:&lt;br /&gt;
    make build;&lt;br /&gt;
 &lt;br /&gt;
build:&lt;br /&gt;
    gcc -I&amp;quot;/usr/include/SDL&amp;quot; -c sdl_app.c;&lt;br /&gt;
    gcc demo.o -lSDL -o sdl_app;&lt;br /&gt;
 &lt;br /&gt;
clean:&lt;br /&gt;
    -rm sdl_app.o;&lt;br /&gt;
    -rm sdl_app;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 아무 그림파일이나 320x240 해상도에 맞춰 bmp로 저장하고 make -f Makefile.sdl_app 이런식으로 하면 되겠다.&lt;br /&gt;
* 아 솔직히 귀찮으면 디렉토리별로 나누면 그게 짱&lt;br /&gt;
* 대충 snail 애니메이션을 해보자.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* sdl_ani.c */&lt;br /&gt;
#include &amp;lt;SDL/SDL.h&amp;gt;&lt;br /&gt;
int main ( int argc, char** argv )&lt;br /&gt;
{&lt;br /&gt;
  SDL_Init(SDL_INIT_EVERYTHING);&lt;br /&gt;
  SDL_Surface* screen = SDL_SetVideoMode(480, 272, 16, SDL_SWSURFACE);&lt;br /&gt;
  SDL_Surface* bmp = SDL_LoadBMP(&amp;quot;character.bmp&amp;quot;);&lt;br /&gt;
  SDL_Rect dstrect;&lt;br /&gt;
  dstrect.y = 100;&lt;br /&gt;
  for (int x = 0; x &amp;lt; 480; x++) {&lt;br /&gt;
    dstrect.x = x;&lt;br /&gt;
    SDL_BlitSurface(bmp, NULL, screen, &amp;amp;dstrect);&lt;br /&gt;
    SDL_Flip(screen);&lt;br /&gt;
    SDL_Delay(10);&lt;br /&gt;
  }&lt;br /&gt;
  SDL_FreeSurface(bmp);&lt;br /&gt;
  SDL_FreeSurface(screen);&lt;br /&gt;
  SDL_Quit();&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 다음은 Makefile.sdl_ani&lt;br /&gt;
&amp;lt;source lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
test:&lt;br /&gt;
    make build;&lt;br /&gt;
 &lt;br /&gt;
build:&lt;br /&gt;
    gcc -I&amp;quot;/usr/include/SDL&amp;quot; -c sdl_ani.c;&lt;br /&gt;
    gcc demo.o -lSDL -o sdl_ani;&lt;br /&gt;
 &lt;br /&gt;
clean:&lt;br /&gt;
    -rm sdl_ani.o;&lt;br /&gt;
    -rm sdl_ani;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 대충 100x100짜리 bmp파일을 character.bmp이라고 명명해서 같은 디렉토리에 넣어두고 실행해보자.&lt;br /&gt;
=== videodemo ===&lt;br /&gt;
* 점찍기 프로그램이다.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    SDL Video Demo&lt;br /&gt;
    demonstrates SDL's video working by moving dots around a screen&lt;br /&gt;
    written by Sayuri L. Kitsune (2012)&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
/* Defines */&lt;br /&gt;
#define NUM_DOTS 1024&lt;br /&gt;
 &lt;br /&gt;
/* Includes */&lt;br /&gt;
#include &amp;lt;time.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/* Types */&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
    int red,green; /* The shade of color in red,green. blue is always 0 since we're using it as the background */&lt;br /&gt;
    float vx,vy; /* Speed the particle is moving */&lt;br /&gt;
    float x,y; /* Current position of particle */&lt;br /&gt;
}dot;&lt;br /&gt;
 &lt;br /&gt;
/* Globals */&lt;br /&gt;
SDL_Surface *demo_screen;&lt;br /&gt;
float demo_time_measure = 0.0f;&lt;br /&gt;
float demo_time_step = 0.0f;&lt;br /&gt;
dot demo_dots[NUM_DOTS];&lt;br /&gt;
 &lt;br /&gt;
/* Returns a random floating point number between 0.0f and 1.0f */&lt;br /&gt;
float demo_roll()&lt;br /&gt;
{&lt;br /&gt;
    float r;&lt;br /&gt;
    r = (float)(rand()%RAND_MAX); /* 0 ~ whatever RAND_MAX is */&lt;br /&gt;
    r /= (float)(RAND_MAX-1); /* one less than RAND_MAX makes it possible for 1.0f to happen */&lt;br /&gt;
    return r;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Initialize dots */&lt;br /&gt;
void demo_init()&lt;br /&gt;
{&lt;br /&gt;
    int i;&lt;br /&gt;
    for(i = 0;i &amp;lt; NUM_DOTS;i++)&lt;br /&gt;
    {&lt;br /&gt;
        demo_dots[i].red = rand()%255;&lt;br /&gt;
        demo_dots[i].green = rand()%255;&lt;br /&gt;
        demo_dots[i].vx = demo_roll()*16.0f-8.0f;&lt;br /&gt;
        demo_dots[i].vy = demo_roll()*16.0f-8.0f;&lt;br /&gt;
        demo_dots[i].x = demo_roll()*320.0f;&lt;br /&gt;
        demo_dots[i].y = demo_roll()*240.0f;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Handle dots */&lt;br /&gt;
void demo_handle()&lt;br /&gt;
{&lt;br /&gt;
    int i;&lt;br /&gt;
    for(i = 0;i &amp;lt; NUM_DOTS;i++)&lt;br /&gt;
    {&lt;br /&gt;
        /* Move */&lt;br /&gt;
        demo_dots[i].x += demo_dots[i].vx*demo_time_step;&lt;br /&gt;
        demo_dots[i].y += demo_dots[i].vy*demo_time_step;&lt;br /&gt;
        /* Hit walls? */&lt;br /&gt;
        if(demo_dots[i].x &amp;lt; 0.0f || demo_dots[i].x &amp;gt;= 320.0f)&lt;br /&gt;
        {&lt;br /&gt;
            /* Undo move (demo_time_step is still the same value it was before and is valid for the current frame) */&lt;br /&gt;
            demo_dots[i].x -= demo_dots[i].vx*demo_time_step;&lt;br /&gt;
            /* Reverse */&lt;br /&gt;
            demo_dots[i].vx = -demo_dots[i].vx;&lt;br /&gt;
        }&lt;br /&gt;
        if(demo_dots[i].y &amp;lt; 0.0f || demo_dots[i].y &amp;gt;= 240.0f)&lt;br /&gt;
        {&lt;br /&gt;
            /* Undo move (demo_time_step is still the same value it was before and is valid for the current frame) */&lt;br /&gt;
            demo_dots[i].y -= demo_dots[i].vy*demo_time_step;&lt;br /&gt;
            /* Reverse */&lt;br /&gt;
            demo_dots[i].vy = -demo_dots[i].vy;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Draw dots */&lt;br /&gt;
void demo_draw()&lt;br /&gt;
{&lt;br /&gt;
    int i,bpp,rank,x,y;&lt;br /&gt;
    Uint32 *pixel;&lt;br /&gt;
    /* Lock surface */&lt;br /&gt;
    SDL_LockSurface(demo_screen);&lt;br /&gt;
    rank = demo_screen-&amp;gt;pitch/sizeof(Uint32);&lt;br /&gt;
    pixel = (Uint32*)demo_screen-&amp;gt;pixels;&lt;br /&gt;
    /* Draw all dots */&lt;br /&gt;
    for(i = 0;i &amp;lt; NUM_DOTS;i++)&lt;br /&gt;
    {&lt;br /&gt;
        /* Rasterize position as integer */&lt;br /&gt;
        x = (int)demo_dots[i].x;&lt;br /&gt;
        y = (int)demo_dots[i].y;&lt;br /&gt;
        /* Set pixel */&lt;br /&gt;
        pixel[x+y*rank] = SDL_MapRGBA(demo_screen-&amp;gt;format,demo_dots[i].red,demo_dots[i].green,0,255);&lt;br /&gt;
    }&lt;br /&gt;
    /* Unlock surface */&lt;br /&gt;
    SDL_UnlockSurface(demo_screen);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Convert from timespec to float */&lt;br /&gt;
float demo_convert_time(struct timespec *ts)&lt;br /&gt;
{&lt;br /&gt;
    float accu;&lt;br /&gt;
    /* Combine the value into floating number */&lt;br /&gt;
    accu = (float)ts-&amp;gt;tv_sec; /* Seconds that have gone by */&lt;br /&gt;
    accu *= 1000000000.0f; /* One second is 1000x1000x1000 nanoseconds, s -&amp;gt; ms, us, ns */&lt;br /&gt;
    accu += (float)ts-&amp;gt;tv_nsec; /* Nanoseconds that have gone by */&lt;br /&gt;
    /* Bring it back into the millisecond range but keep the nanosecond resolution */&lt;br /&gt;
    accu /= 1000000.0f;&lt;br /&gt;
    return accu;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Start time */&lt;br /&gt;
void demo_start_time()&lt;br /&gt;
{&lt;br /&gt;
    struct timespec ts;&lt;br /&gt;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&amp;amp;ts);&lt;br /&gt;
    demo_time_measure = demo_convert_time(&amp;amp;ts);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* End time */&lt;br /&gt;
void demo_end_time()&lt;br /&gt;
{&lt;br /&gt;
    struct timespec ts;&lt;br /&gt;
    float delta;&lt;br /&gt;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&amp;amp;ts);&lt;br /&gt;
    delta = demo_convert_time(&amp;amp;ts)-demo_time_measure; /* Find the distance in time */&lt;br /&gt;
    demo_time_step = delta/(1000.0f/16.0f); /* Weird formula, equals 1.0f at 16 frames a second */&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/* Main */&lt;br /&gt;
int main(int argn,char **argv)&lt;br /&gt;
{&lt;br /&gt;
    SDL_Event ev;&lt;br /&gt;
    int active;&lt;br /&gt;
    /* Initialize SDL */&lt;br /&gt;
    if(SDL_Init(SDL_INIT_VIDEO) != 0)&lt;br /&gt;
        fprintf(stderr,&amp;quot;Could not initialize SDL: %s\n&amp;quot;,SDL_GetError());&lt;br /&gt;
    /* Open main window */&lt;br /&gt;
    demo_screen = SDL_SetVideoMode(320,240,0,SDL_HWSURFACE|SDL_DOUBLEBUF);&lt;br /&gt;
    if(!demo_screen)&lt;br /&gt;
        fprintf(stderr,&amp;quot;Could not set video mode: %s\n&amp;quot;,SDL_GetError());&lt;br /&gt;
    /* Initialize game */&lt;br /&gt;
    demo_init();&lt;br /&gt;
    /* Main loop */&lt;br /&gt;
    active = 1;&lt;br /&gt;
    while(active)&lt;br /&gt;
    {&lt;br /&gt;
        /* Handle events */&lt;br /&gt;
        while(SDL_PollEvent(&amp;amp;ev))&lt;br /&gt;
        {&lt;br /&gt;
            if(ev.type == SDL_QUIT)&lt;br /&gt;
                active = 0; /* End */&lt;br /&gt;
        }&lt;br /&gt;
        /* Start time */&lt;br /&gt;
        demo_start_time();&lt;br /&gt;
        /* Handle game */&lt;br /&gt;
        demo_handle();&lt;br /&gt;
        /* Clear screen */&lt;br /&gt;
        SDL_FillRect(demo_screen,NULL,SDL_MapRGBA(demo_screen-&amp;gt;format,0,0,255,255));&lt;br /&gt;
        /* Draw game */&lt;br /&gt;
        demo_draw();&lt;br /&gt;
        /* Show screen */&lt;br /&gt;
        SDL_Flip(demo_screen);&lt;br /&gt;
        /* End time */&lt;br /&gt;
        demo_end_time();&lt;br /&gt;
    }&lt;br /&gt;
    /* Exit */&lt;br /&gt;
    SDL_Quit();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* 초당 16프레임으로 랜덤으로 이동하는 1024개의 픽셀을 표현하는걸 만들었다.&lt;/div&gt;</summary>
		<author><name>91.236.74.180</name></author>
	</entry>
</feed>