JESUS LOVE
2019-08-21 20:45:27 작성 2019-08-21 20:46:10 수정됨
2
333

아까 콘솔 RPG게임 만든거 다시 한번 수정했습니다.




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MapleStroy
{
    class Monster
    {
        private int Level = 1;
        public int HP = 35;
        public int HP_Max = 35;
        public int AP = 7;

        public void CharInfo()      //몬스터의 정보
        {
            Console.WriteLine($"몬스터 레벨 : {Level}");
            Console.WriteLine($"HP : {HP} / {HP_Max}");
            Console.WriteLine($"공격력 : {AP}");
        }

        public void LevelUp()       // 캐릭터가 레벨업을 하는것에 따라 몬스터도 같이 레벨이 올라감
        {
            Level += 1;
            HP_Max += Level * 6;
            HP = HP_Max;
            AP += Level * 3;
        }
    }
    class Player
    {
        private string CharName;
        public int Level = 1;
        private int Meso = 0;

        public int Exp = 0;
        public int Exp_Max = 10;

        public int HP_Max = 50;
        public int HP = 50;
        public int AP = 11;

        private int JobNum;
        private string Job = "초보자";
        public void CharInfo()      // 캐릭터의 정보들
        {
            Console.WriteLine($"모험가 이름 : {CharName}");
            Console.WriteLine($"레벨 : {Level}");
            Console.WriteLine($"메소 : {Meso}");
            Console.WriteLine($"경험치 : {Exp} / {Exp_Max} ");
            Console.WriteLine($"HP : {HP} / {HP_Max}");
            Console.WriteLine($"공격력 : {AP}");
            Console.WriteLine($"직업 : {Job}");
        }

        public void CharGenerate()      //캐릭터 생성할때 이름 정하기
        {
            Console.Write("캐릭터 이름을 정하세요-> ");
            CharName = Console.ReadLine();
        }

        public void LevelUp()       //캐릭터 레벨업
        {
            Level += 1;
            Exp -= Exp_Max;
            Exp_Max += Level * 8;
            HP_Max += Level * 10;
            HP = HP_Max;
            AP += Level * 3;
        }

        public void ExpReceive()    //경험치 획득
        {
            Exp += Level * 6 + 2;
            Meso += Level * 5 + 2;
        }

        public void JobChange()     //캐릭터 전직하기
        {
            Console.WriteLine("전직을 시행합니다.");
            Console.Write("1. 전사, 2. 마법사, 3. 궁수, 4. 도적, 5. 해적 -> ");

            JobNum = int.Parse(Console.ReadLine());

            switch (JobNum)
            {
                case 1:
                    Job = "전사";
                    break;
                case 2:
                    Job = "마법사";
                    break;
                case 3:
                    Job = "궁수";
                    break;
                case 4:
                    Job = "도적";
                    break;
                case 5:
                    Job = "해적";
                    break;
                default:
                    Job = "전직없음.";
                    break;
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Player player = new Player();
            Monster monster = new Monster();

            Console.WriteLine("NEXON!! ★♣♠");
            Console.WriteLine("Maple Stroy~ ♬♪♩");
            Console.WriteLine();

            player.CharGenerate();
            Console.WriteLine();

            player.CharInfo();
            monster.CharInfo();

            int life = 10;

            while (true)
            {
                Console.WriteLine();
                Console.Write("1. 공격 2. 맞기 -> ");
                int fight = int.Parse(Console.ReadLine());

                if (fight == 1)
                {
                    monster.HP -= player.AP;
                }
                else
                {
                    player.HP -= monster.AP;
                }

                if(player.HP <= 0)
                { 
                    Console.WriteLine("캐릭터가 사망하였습니다.");
                    Console.WriteLine();

                    player.HP = player.HP_Max;

                    player.Exp -= player.Level * 3;

                    if (player.Exp <= 0)
                        player.Exp = 0;
                    life--;
                }
                if(monster.HP <= 0)
                {
                    player.ExpReceive();
                    monster.HP = monster.HP_Max;
                }

                if(player.Exp >= player.Exp_Max)
                {
                    Console.WriteLine("Level Up ㅎㅎ!!");
                    Console.WriteLine();
                    player.LevelUp();
                    monster.LevelUp();
                    life = 10;
                }
                
                if (player.Level == 10)
                {
                    player.JobChange();
                }

                if (life == 0)
                {
                    Console.WriteLine("Game Over ㅠㅠ!!");
                    break;
                }

                player.CharInfo();
                Console.WriteLine($"수명 횟수 : {life}회 남음. ");
                Console.WriteLine();
                monster.CharInfo();
                Console.WriteLine();
            }
        }
    }
}

여기서 조언과 피드백을 구합니다. 어디부분이 너무 비효율적인지요.

저는 현재 게임학원에서 공부하고 있는 취준생이며, 프로그래밍 공부 경험은 어느정도 있는 편이지만 중급단계 까지 간 경험도 없는것 같고 사실 프로그래밍 경험이 예전에는 거의 겉핥기식 위주로 했을 뿐입니다.

저는 게임프로그래머를 진로로 정하고 있으며, 고졸이 아닌 전문대졸이라면 갈 수 있는 회사들 많은지 궁금합니다.

학력이 중요하다면 전문대를 나와도 괜찮은지요.

0
  • 답변 2

  • 물곰
    86
    2019-08-21 23:14:56

    2번이나 글을 올리셔서 솔직하게 적겠습니다.


    먼저 이 코드를 보면 재미있게 코딩하신 것 같다는 생각이 듭니다. 그래서 읽어보고도 쓴 소리 하기가 좀 그렇습니다.

    그런데 그 뿐입니다.

    솔직히 작성자 분이 왜 코드리뷰를 받고 싶어하시는지 모르겠습니다. 어느 부분이 별로라는건 정말 한도끝도 없는 이야기고 내용 자체가 그냥 학부 1학년이 2시간정도 코딩해서 만든 코드 같습니다. 한마디로 노력해서 만든 코드같아 보이지가 않습니다... 심한 말이라면 죄송합니다.

    그리고 그런 코드에 일일히 리뷰하고 싶은 사람은 없습니다.

    그냥 계속 해보세요.
    스스로 이 게임이 더 완전해지려면 어떤 요소가 필요한지 고민해보세요.
    그리고 그걸 실현시키려면 어떤게 필요한지 검색하고 만들어보세요.
    더 공부해보세요.

    만약 비슷한 처지의 다른 학생들의 수준이 궁금하다면 그냥 구글에 대학생 게임 졸업작품이라고 검색이라도 해 보세요. 그리고 그 수준의 게임들이 단순히 대학교에서 몇 년 시간 보낸다고 나오는건지, 아니면 스스로 고민하고 공부해서 나오는 결과인지 고민해 보시길 바랍니다.
  • 도라도로떠납니다
    680
    2019-08-22 09:01:54

    각 객체가 가지고 있어야할 속성 (예를들면 몬스터가 제공하는경험치 등) 이 부족하고 애매한거같고

    사냥하는 액션을 메소드로 빼면좋을거같고

    c 계열은 메소드명을 대문자로 시작하나요?

    monster.HP -= player.AP 와 같이 외부에서 직접 객체의 속성을 건드리는경우는 문제가있고요

    수치등을 다 하드코딩해놨던데 객체가 생성될때 각각 값이 init 되도록하는것이 좋을거같고

    마찬가지로 객체지향에대한 공부가 필요합니다


  • 로그인을 하시면 답변 을 등록할 수 있습니다.