Loading...
Hristo_Penchev avatar Hristo_Penchev 389 Точки

[Homework] Consuming Web Services with C#

Колеги, отварям темата, за да дискутираме задачите тук. При мен лично има много неизвестни как да имплементирам играта. Например корабите нямат принадлежност към никой играч, Смятам, че трябва да им се въведе PlayerId. Иначе просто и двамата гърмят по рандом кораби. Освен това мисля, че е е логично играчът да вижда разположението на собствените си кораби. Тоест трябва да направим заявка, която да връща състоянието на играта. Но тук вече идва проблемът как другият играч да не ги вижда. Съответно играта трябва да бъде пусната през две независими конзолни приложения от две машини. И всяка да получава само информация за логнатия в нея юзър. Това може също да се направи. 

Това, което обаче е голямата трудноест е как аз като стрелям, другият да види къде съм уцелил. С някакъв евент трябва автоматично да се праща заявка, която на него да му печата картата на бойното поле. Като цяло има много неизвестни по играта. Споделяйте и вие идеи и опит.

0
C# Web Services & Cloud
RoYaL avatar RoYaL Trainer 6849 Точки

Гледай на цялата работа като на една купчина с отговори, които не се пращат сами по въпросите си, а някой трябва да зададе конкретен въпрос, за да се появи този отговор.

Ако искаш да правиш цялото нещо с едно конзолно приложение, си направи логика, кой играч е на ход. Когато е играч А - сменяй сесийния тоукън да е този на играчът А. Когато е играч Б на ход, сменяй сесийния тоукън да е на играч Б. Така заявките ще се пращат от този потребител, а не от друг.

Но задължитело трябва да се задават въпроси, т.е. да се пита сървиса. Да се пита за текущото състояние, да се пита за това къде са ми ударени корабите и т.н.

Поледни го така, нека приемем, че конзолното ти пролжение приема команди (не знам какво ви е домашното).

Когато потребителят въведе командата "attack" да речем

CurrentPlayer.Attack();

ChangePlayer();

Методът ChangePlayer() от своя страна прави CurrnetPlayer да е другият играч. Може играчът (CurrentPlayer който да приемем, че е обект от тип Player) да пази в себе си сесийният си тоукън след като се е логнал. Така като пращаш Authentication header-а, апендваш след Bearer CurrentPlayer.SessionToken. Така заявките ще се изпълняват само и дениствен от текущия играч. Той пише комада, тя се изпълнява от негово име и се ChangePlayer() съответно другият играч става на ход. Той пише команда, тя се изпълнява от негово име и се сменя плейъра.

Можеш определени команди да ги направиш да се държат по различен начин. Примерно командата аттак когато смени играчът, автоматично да прати от негово име заявка, която да попита къде е ударен. Така ще симулираш този event.

1
a.angelov avatar a.angelov 1316 Точки

Аз доколкото разгледах кода мисля, че просто не е довършена логиката на играта:

1. Не се генерират никакви кораби в момента - има едно // TODO: Generate ships в GamesController-а, CreateGame метода - тоест ще хвърляме бомби на празно smiley

2. Има само едно игрално поле - мисля си, всеки трябва да си има поле с неговите си кораби, съответно всеки от играчите вижда своето поле;

Та извода ми е, че просто ще трябва да направим това, което се иска в домашното, абстрахирайки се от логиката на действителната игра на кораби smiley

1
Hristo_Penchev avatar Hristo_Penchev 389 Точки

Аз се захванах да пиша игра. Закачих към всеки играч по 10 кораба, ще направя заявка, която да връща полето само с корабите на съответния играч. Но ще трябва да се играе от две конзоли.

0
Hristo_Penchev avatar Hristo_Penchev 389 Точки

Май се отказах от играта. Тези ентитита не ми е ясно как работят, но постоянно гърмят. Сигурно ще успея да ги разуча, но ще ми коства страшно много време. Някой друг път ще го допиша до истинска игра.

0
a.angelov avatar a.angelov 1316 Точки

Има проблем със задачата и вече се чудя защо се получава така - винаги получавам BadRequest статус код. Ето кода за регистриране на юзъра /параметрите които влизат са правилни, url-а е правилен, сървиса е пуснат.../:

private static async void RegisterUser(string[] parameters)
        {
            string email = parameters[1];
            string password = parameters[2];
            string confirmPassword = parameters[3];

            using (var httpClient = new HttpClient())
            {
                string endpoint = BaseUrl + "api/account/register";
                var content = new FormUrlEncodedContent(new[]
                {
                    new KeyValuePair<string, string>("Email", email), 
                    new KeyValuePair<string, string>("Password", password), 
                    new KeyValuePair<string, string>("ConfirmPassword", confirmPassword), 
                });

                var response = await httpClient.PostAsync(endpoint, content);
                Console.WriteLine(response.StatusCode);
            }
        }

Ще се радвам някой да помогне.

0
a.angelov avatar a.angelov 1316 Точки

Няма да казвам какво съм /емотикона на човече, което си блъска главата в стената/. Не знам защо съм си мислел, че са махнати изискванията за паролата и изобщо не проверих там... Благодаря, това е проблема, всичко е ок вече yes

0
Abraxas avatar Abraxas 47 Точки

Колеги, не знам защо, ма имам големи проблеми да намеря откъде да си взема access token-а след login, а за да създам/присъединя към/играя игра трябва да съм authorized. Някой, ако може да ми каже как е успял с authorization-a ще съм му благодарен!

0
RoYaL avatar RoYaL Trainer 6849 Точки

/Token

1
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Аз лично предпочитам да сменям rout-a, че това /Token не ми харесва особено и си го правя да е api/Account/login 

Промяната се прави в App_Start/Startup.Auth.cs като променяте TokenEndpointPath да изглежда така:

TokenEndpointPath = new PathString("/api/Account/login")

3
26/08/2015 11:57:03
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.