2013-05-08 4 views
2

Я создаю игру с использованием MVC 4. Есть функция преступления, и я просто не могу ее решить. Я пробовал много вещей, но так как я новичок в MVC4, я просто не могу понять это.Различные результаты для actionresult

Я создал список радиобуев, и каждый другой вариант должен давать переменный результат. Это код до сих пор:

Контроллер:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using FiveGangs.Models; 

namespace FiveGangs.Controllers.Game { 
[Authorize] 
public class CrimesController : Controller { 
    // 
    // GET: /Crimes/ 
    [HttpGet] 
    public ActionResult Index() { 
     return View(); 
    } 
    // 
    // POST: /Crimes/ 
    [HttpPost] 
    public ActionResult Index(LocalCrimeModel.Crime crimeType) { 
     //1 is de beste crime, 10 de slechste 
     ViewBag.Message = "You commited the crime!"; 
     var db = new FGEntities(); 

     var g = db.UserGangster.FirstOrDefault(p => p.UserProfile.UserName == User.Identity.Name); 


     g.GansterStatistic.CrimesSuccess++; 
      g.Experience += 1000; 
     g.Cash += 100; 
     db.SaveChanges(); 

     return View(); 
    } 
} 
} 

Модель:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace FiveGangs.Models 
{ 
public class LocalCrimeModel 
{ 
    public enum Crime 
    { 
     Crime01 = 1, 
     Crime02 = 2, 
     Crime03 = 3, 
     Crime04 = 4, 
     Crime05 = 5, 
     Crime06 = 6, 
     Crime07 = 7, 
     Crime08 = 8, 
     Crime09 = 9, 
     Crime10 = 10, 
    } 

    public Crime SelectedCrime { get; set; } 
} 
} 

Вид:

@using FiveGangs.Models 
@model FiveGangs.Models.LocalCrimeModel 

<!DOCTYPE html> 

<html> 
<head> 
<title>Crimes</title> 
</head> 
<body> 
<div> 
    <h2>Crimes</h2> 
    @if (ViewBag.Message != null) { 
     <p class="warning">@ViewBag.Message</p> 
    } 

    @using (Html.BeginForm("Index")) { 
     @Html.RadioButton("crimetype", LocalCrimeModel.Crime.Crime01, false)@: Rob the local bank<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime02, false)@: Rob the local casino<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime03, false)@: Rob a jewelry store<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime04, false)@: Rob the local café<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime05, false)@: Steal casino chips from the local casino<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime06, false)@: Rob the local theatre<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime07, false)@: Rob the local supermarket<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime08, false)@: Rob a laundry service<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime09, false)@: Empty a parking meter<br> 
     @Html.RadioButton("crimeType", LocalCrimeModel.Crime.Crime10, false)@: Pickpocket someone<br /><br /> 

     <input class="btn btn-large btn-primary" type="submit" value="Commit crime!" /> 
    } 
</div> 
</body> 
</html> 

До сих пор я могу успешно выполнить преступление, и опыт и деньги добавляются в базу данных. Я застрял в изменении «выплат» за каждое преступление. Любая помощь приветствуется, я искал поисковые запросы в течение 2 дней без результата.

Благодаря

+0

Таким образом, вы просто хотите 'g.Experience + = 1000; 'и' g.Cash + = 100; 'должны быть переменными, а не жестко закодированными до 1000 и 100 соответственно? – Belogix

+0

Я хочу, чтобы каждый уровень преступности имел разные выплаты, так как пример crime01 выплачивает exp 100-110, а выплата преступности02 составляет 110-120. –

ответ

2

Вы ищете конструкцию языков switch?

Вы можете просто написать:

switch (crimeType) 
{ 
    case LocalCrimeModel.Crime.Crime01: 
     g.Experience += 1000; 
     g.Cash += 100; 
     break; 
    case LocalCrimeModel.Crime.Crime02: 
     g.Experience += 2000; 
     g.Cash += 200; 
     break; 
    case LocalCrimeModel.Crime.Crime03: 
     g.Experience += 3000; 
     g.Cash += 300; 
     break; 
    case LocalCrimeModel.Crime.Crime04: 
     g.Experience += 4000; 
     g.Cash += 400; 
     break; 
... 
    default: 
     break;   
} 

не можешь?


EDIT:

С другой стороны, этот вид жестко закодированы логики не очень масштабируемое, преступления не должны быть enum, но вместо List<Crime> заполняется форма базы данных. Crime должен быть как:

public class LocalCrimeModel 
{ 
    public class Crime 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public decimal Cash { get; set; } 
     public int Experience { get; set; } 
    } 

    public string Message { get; set; } 

    public IList<Crime> Crimes { get; set; } 

    public int SelectedCrimeID { get; set; } 

    public Crime SelectedCrime 
    { 
     get 
     { 
      if (this.Crimes != null) 
      { 
       return this.Crimes.FirstOrDefault(o => o.ID == this.SelectedCrimeID); 
      } 
      else 
      { 
       return null; 
      } 
     } 
    } 
} 

CrimesController может быть точно так же как:

public class CrimesController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new LocalCrimeModel(); 
     model.Crimes = GetCrimes(); // THIS SHOULD BE A RESULT OF A DATABASE QUERY 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(LocalCrimeModel model) 
    { 
     if (model != null) 
     { 
      model = new LocalCrimeModel(); // just to be sure 
     } 

     model.Crimes = GetCrimes(); // USE THE SAME QUERY HERE 

     if (model != null && model.SelectedCrime != null) 
     { 
      var db = new FGEntities(); 

      var g = db.UserGangster.FirstOrDefault(p => p.UserProfile.UserName == User.Identity.Name); 

      g.GansterStatistic.CrimesSuccess++; 

      g.Experience += model.SelectedCrime.Experience; 
      g.Cash += model.SelectedCrime.Cash; 
      db.SaveChanges(); 

      model.Message = "You commited the crime!"; 
     } 
     else 
     { 
      model.Message = "Crime does not exist!"; 
     } 

     return View(model); 
    } 
} 

Кроме того, ваш взгляд может быть как:

@using FiveGangs.Models 
@model FiveGangs.Models.LocalCrimeModel 

<!DOCTYPE html> 

<html> 
<head> 
<title>Crimes</title> 
</head> 
<body> 
<div> 
    <h2>Crimes</h2> 
    @if (model.Message != null) 
    { 
     <p class="warning">@model.Message</p> 
    } 

    @using (Html.BeginForm()) 
    { 
     foreach (var crime in Model.Crimes) 
     { 
      <text>@Html.RadioButton("SelectedCrimeID", crime.ID, false): @crime.Name<br /></text> 
     } 
     <br /> 
     <input class="btn btn-large btn-primary" type="submit" value="Commit crime!" /> 
    } 
</div> 
</body> 
</html> 
+0

Ничего себе, спасибо большое! Мне все равно придется кое-что выяснить, но это здорово. Я обновлю вас, когда у меня это получится! Еще раз спасибо! –

1

Вы должны иметь Crime таблицу в базе данных, таким образом, вы можете хранить ваши выплаты по каждому преступлению.

С другой стороны, не было бы лучше изменить все эти кнопки радио в выпадающий список.

Смежные вопросы