Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal

Ответ
 
Опции темы
Старый 08.06.2013, 16:25   #1
WildHash1
AnyKey`щик
 
Регистрация: 03.06.2013
Сообщений: 2
Написано 0 полезных сообщений
(для 0 пользователей)
Нужна в помощь в написании игры

Помогите пожалуйста написать игру "поле чудес" ...Но с минимум визуализацией...Можно чуть чуть графики...
Вопрос и ответ,которые уже заранее написанные в файле...
(Offline)
 
Ответить с цитированием
Старый 08.06.2013, 22:16   #2
WildHash1
AnyKey`щик
 
Регистрация: 03.06.2013
Сообщений: 2
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Нужна в помощь в написании игры

(Offline)
 
Ответить с цитированием
Старый 08.06.2013, 22:59   #3
jimon
 
Сообщений: n/a
Ответ: Нужна в помощь в написании игры

и чем же тебе помочь ?
 
Ответить с цитированием
Старый 23.07.2013, 15:33   #4
_DARKSIDER_
AnyKey`щик
 
Аватар для _DARKSIDER_
 
Регистрация: 11.07.2013
Адрес: РФ,Ивановская обл.,г.Иваново
Сообщений: 15
Написано 4 полезных сообщений
(для 6 пользователей)
Ответ: Нужна в помощь в написании игры

"Помогите сделать игру! От вас требуется всего лишь написать за меня весь код игры,а я в свою очередь отблагодарю вас обильным урожаем хрена."-вот так я понял смысл первого поста.
(Offline)
 
Ответить с цитированием
Старый 29.07.2013, 07:53   #5
Stabilitron
Нуждающийся
 
Аватар для Stabilitron
 
Регистрация: 01.07.2007
Сообщений: 58
Написано 15 полезных сообщений
(для 49 пользователей)
Ответ: Нужна в помощь в написании игры

билд https://dl.dropboxusercontent.com/u/...ldOfDreams.zip

Накидал по-быстрому. Все стандартно говнокод, много багов, нелогичное поведение и тп, в общем гуд вэй кодинг, но общее представление должно появиться. Хотя оно в принципе и так пашет.

В директории topics создаем xml-нички следующего вида:

<?xml version="1.0"?>
    <TaskDictionary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Tasks>
        <Task Quastion="Дворцовый белый хлеб для царского стола в XV—XVII вв." Answer="басман" />
        <Task Quastion="Хлеб из пшеничной муки, обмазанный сметаной и маслом" Answer="шаньга" />
        <Task Quastion="В норвежской кухне так называется суп из пива" Answer="курут" />
  </Tasks>
</TaskDictionary>
Именем файла будем имя темы раунда. То есть можно создать несколько файлов, типа, "Музыка.xml", "Хлеб.xml" и тп. Содержимое можно дополнять, добавив, скажем, подсказки к вопросам по несколько штук илиеще что, типа, вводной фразы ведущего на всю тему.

Игра предложит игроку выбрать тему. После чего из темы будет выдран рандомный вопрос и показан игроку. Игрок крутит барабан энтером и вводит по одному символу, получая очки за открытые буквы. Целиком вводить слово нельзя. Проиграть нельзя. Уменьшить кол-во очков и всякие там банкроты отсутвтсуют так же. Дарить подарки Якубовичу нельзя.

Зато на каждое вращение барабана выводится вопрос, очки игрока и текущее состояние разгаданного слова вида "__р__о_а"

Все сплошным текстом сейчас, лучше разнести в своем проекте по раздельным файлам. В общем ковыряйся, задавай вопросы, переделывай под свое видение. ИИ нет, кстати, никакого.
Комментариев нет ибо на скору руку. Если будет непонятно совсем, на днях закомменчу или даже отрефакторю, но не обещаю ничего.

Инжой в общем.



using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace FieldOfDreams
{
    class Program
    {
        static Dictionary<string, int> _cylinder = new Dictionary<string, int>()
                                                      {
                                                          {"Сто очков", 100},
                                                          {"Пятьдесят очков", 50},
                                                          {"Двести очков", 200},
                                                      }; 

        static void Main(string[] args)
        {
            Player player = null;

            Console.WriteLine("Здравствуйте! Представьтесь :");

            while (player == null)
            {
                var name = Console.ReadLine();
                if (!string.IsNullOrEmpty(name))
                {
                    player = new Player(name);
                }
            }

            Console.Clear();
            Console.WriteLine("Выберите тему воросов:");
            var topics = new DirectoryInfo(@".\topics").GetFiles("*.xml");
            for (var i = 0; i < topics.Length; i++)
            {
                Console.WriteLine(string.Format("{0}) {1}", i + 1, Path.GetFileNameWithoutExtension(topics[i].FullName)));
            }

            FileInfo choosenTopic = null;

            while (choosenTopic == null)
            {
                string line = Console.ReadLine();
                int value;
                if (int.TryParse(line, out value) && value > 0 && value <= topics.Length)
                {
                    choosenTopic = topics[--value];
                }
                else
                {
                    Console.WriteLine(string.Format("Повторите выбор темы, значение должно быть в диапозоне от 1 до {0}", topics.Length));
                }
            }

            Console.Clear();
            Console.WriteLine(string.Format("Вы выбрали {0}", Path.GetFileNameWithoutExtension(choosenTopic.FullName)));
            var tasks = GetTasks(choosenTopic);

            var rnd = new Random();
            var r = rnd.Next(tasks.Tasks.Length);
            
            var round = new Round(){Task = tasks.Tasks[r]};

            Console.WriteLine(string.Format("Вопрос раунда {0}", round.Task.Quastion));

            while (!round.Result.HasValue)
            {
                Console.WriteLine("Вращайте барабан <Нажмите Enter>");

                Console.ReadKey();

                var keys = new List<string>(_cylinder.Keys);
                int size = _cylinder.Count;
                var rand = new Random();
                
                string randomKey = keys[rand.Next(size)];
                int diffScore = _cylinder[randomKey];


                Console.Clear();
                Console.WriteLine(string.Format("Вопрос: {0}", round.Task.Quastion));
                Console.WriteLine(string.Format("Слово: {0}", round.GetOpenSymbols()));
                Console.WriteLine(string.Format("Очки: {0}", player.Scores));

                Console.WriteLine(string.Format("Сектор \"{0}\" на барабане, назовите букву", randomKey));

                var playerSymbol = Console.ReadLine();
                if (!string.IsNullOrEmpty(playerSymbol) && playerSymbol.Length == 1)
                {
                    var symbol = playerSymbol.ToCharArray()[0];
                    if (!player.CheckSymbol(symbol))
                    {
                        Console.WriteLine("Вы уже называли эту букву.");
                    }
                    else
                    {
                        if (round.CheckSymbol(symbol))
                        {
                            Console.WriteLine("Вы угадали букву!");
                            player.Scores += diffScore;
                        }
                        else
                        {
                            Console.WriteLine("Вы не угадали букву!");
                        }
                    }
                    
                }
            }

            Console.WriteLine(string.Format("Игра окончена. Результат: вы {0}", round.Result.Value ? "победили" : "проиграли"));
            Console.ReadLine();
        }

        public static TaskDic GetTasks(FileInfo topic)
        {
            if (!topic.Exists)
            {
                return default(TaskDic);
            }

            var fs = new FileStream(topic.FullName, FileMode.Open);
            try
            {
                var sr = new XmlSerializer(typeof(TaskDic));
                return (TaskDic)sr.Deserialize(fs);
            }
            finally
            {
                fs.Close();
            }
        }
    }

    public class Player
    {
        public string Name { get; set; }
        private List<char> _usedSymbols= new List<char>();
        public int Scores;
        
        public Player(string name)
        {
            Name = name;
        }

        public bool CheckSymbol(char symbol)
        {
            if (_usedSymbols.Contains(symbol))
            {
                return false;
            }
            _usedSymbols.Add(symbol);
            return true;
        }
    }

    public class Round
    {
        public Task Task { get; set; }
        public List<KeyValuePair<int, char>> OpenSymbols = new List<KeyValuePair<int, char>>();
        public bool? Result;

        public bool CheckSymbol(char a)
        {
            var indexes = GetAllIndexesOf(a);
            foreach (var i in indexes)
            {
                OpenSymbols.Add(new KeyValuePair<int, char>(i, a));
            }

            if (OpenSymbols.Count == Task.Answer.Length)
            {
                Result = true;
            }

            return indexes.Count > 0;
        }

        private List<int> GetAllIndexesOf(char value)
        {
            var indexes = new List<int>();
            for (int index = 0; ; index += 1)
            {
                index = Task.Answer.IndexOf(value, index);
                if (index == -1)
                {
                    return indexes;
                }
                indexes.Add(index);
            }
        }

        public string GetOpenSymbols()
        {
            var strBuilder = new StringBuilder(Task.Answer.Aggregate("", (current, t) => current + "_"));

            foreach (var os in OpenSymbols)
            {
                strBuilder[os.Key] = os.Value;
            }

            return strBuilder.ToString();
        }
    }

    [XmlRootAttribute("TaskDictionary")]
    public class TaskDic
    {
        [XmlArrayAttribute("Tasks")]
        public Task[] Tasks;
    }

    public class Task
    {
        [XmlAttribute]
        public string Quastion { get; set; }
        [XmlAttribute]
        public string Answer { get; set; }

    }
}

Последний раз редактировалось Stabilitron, 29.07.2013 в 08:13. Причина: добавил билд.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 10:17.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com