protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); this.SetContentView(Resource.Layout.NewGame); // Create your application here EditText pName = FindViewById <EditText>(Resource.Id.txtGameName); // games list ListView pGamesList = FindViewById <ListView>(Resource.Id.gamesList); pGamesList.Adapter = new DrawerItemCustomAdapter(this, Resource.Layout.ListViewItemRow, m_lGameTypes.ToArray()); pGamesList.ItemClick += (object sender, Android.Widget.AdapterView.ItemClickEventArgs e) => { int iChoice = e.Position; m_sSelectedType = m_lGameTypes[iChoice]; TextView pGameType = FindViewById <TextView>(Resource.Id.txtGameType); pGameType.Text = "Game type - " + m_sSelectedType; }; Button pSubmit = FindViewById <Button>(Resource.Id.btnSubmitGame); pSubmit.Click += delegate { if (m_sSelectedType == "") { var pBuilder = new AlertDialog.Builder(this); pBuilder.SetMessage("You must select a game type"); pBuilder.SetPositiveButton("Ok", (e, s) => { return; }); pBuilder.Show(); } else if (pName.Text == "") { var pBuilder = new AlertDialog.Builder(this); pBuilder.SetMessage("Please enter a name for your game"); pBuilder.SetPositiveButton("Ok", (e, s) => { return; }); pBuilder.Show(); } else { string sBody = Master.BuildCommonBody("<param name='sGameName'>" + pName.Text.ToString() + "</param>"); string sResponse = WebCommunications.SendPostRequest(Master.GetBaseURL() + Master.GetGameURL(m_sSelectedType) + "CreateNewGame", sBody, true); XElement pResponse = Master.ReadResponse(sResponse); string sResponseMessage = pResponse.Element("Text").Value; var pBuilder = new AlertDialog.Builder(this); pBuilder.SetMessage(sResponseMessage); if (pResponse.Attribute("Type").Value == "Error") { pBuilder.SetPositiveButton("Ok", (e, s) => { return; }); } else { pBuilder.SetPositiveButton("Ok", (e, s) => { this.SetResult(Result.Ok); this.Finish(); }); } pBuilder.Create().Show(); } }; }
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); if (resultCode == Result.Ok) { // TODO: HANDLE EXTRA HERE string sType = data.GetStringExtra("Type"); XElement pResponse = null; bool bRestartRequested = false; if (sType == "initial") { string sRule = data.GetStringExtra("Rule"); string sInitialCorrectKoan = data.GetStringExtra("CorrectKoan"); string sInitialIncorrectKoan = data.GetStringExtra("IncorrectKoan"); string sBody = Master.BuildCommonBody(Master.BuildGameIDBodyPart(m_sGameID) + "<param name='sRule'>" + sRule + "</param><param name='sBuddhaNatureKoan'>" + sInitialCorrectKoan + "</param><param name='sNonBuddhaNatureKoan'>" + sInitialIncorrectKoan + "</param>"); string sResponse = WebCommunications.SendPostRequest(Master.GetBaseURL() + Master.GetGameURL("Zendo") + "SubmitInitialKoans", sBody, true); if (Master.CleanResponse(sResponse) != "") { pResponse = Master.ReadResponse(sResponse); } } else if (sType == "build") { string sKoan = data.GetStringExtra("Koan"); bool bMondo = data.GetBooleanExtra("Mondo", false); string sBody = Master.BuildCommonBody(Master.BuildGameIDBodyPart(m_sGameID) + "<param name='sKoan'>" + sKoan + "</param>"); string sResponse = ""; if (!bMondo) { sResponse = WebCommunications.SendPostRequest(Master.GetBaseURL() + Master.GetGameURL("Zendo") + "SubmitKoan", sBody, true); } else { sResponse = WebCommunications.SendPostRequest(Master.GetBaseURL() + Master.GetGameURL("Zendo") + "SubmitMondo", sBody, true); } if (Master.CleanResponse(sResponse) != "") { pResponse = Master.ReadResponse(sResponse); } bRestartRequested = true; } else if (sType == "analysis") { bool bHasBuddhaNature = data.GetBooleanExtra("HasBuddhaNature", false); string sBody = Master.BuildCommonBody(Master.BuildGameIDBodyPart(m_sGameID) + "<param name='bHasBuddhaNature'>" + bHasBuddhaNature + "</param>"); string sResponse = WebCommunications.SendPostRequest(Master.GetBaseURL() + Master.GetGameURL("Zendo") + "SubmitPendingKoanAnalysis", sBody, true); if (Master.CleanResponse(sResponse) != "") { pResponse = Master.ReadResponse(sResponse); } } else if (sType == "predict") { bool bPrediction = data.GetBooleanExtra("Prediction", false); string sBody = Master.BuildCommonBody(Master.BuildGameIDBodyPart(m_sGameID) + "<param name='bPrediction'>" + bPrediction + "</param>"); string sResponse = WebCommunications.SendPostRequest(Master.GetBaseURL() + Master.GetGameURL("Zendo") + "SubmitMondoPrediction", sBody, true); if (Master.CleanResponse(sResponse) != "") { pResponse = Master.ReadResponse(sResponse); } bRestartRequested = true; } else if (sType == "guess") { string sGuess = data.GetStringExtra("Guess"); string sBody = Master.BuildCommonBody(Master.BuildGameIDBodyPart(m_sGameID) + "<param name='sGuess'>" + Master.EncodeXML(sGuess) + "</param>"); string sResponse = WebCommunications.SendPostRequest(Master.GetBaseURL() + Master.GetGameURL("Zendo") + "SubmitGuess", sBody, true); if (Master.CleanResponse(sResponse) != "") { pResponse = Master.ReadResponse(sResponse); } bRestartRequested = true; } else if (sType == "disprove") { bool bSuccessfullyDisproved = data.GetBooleanExtra("Disprove", false); if (!bSuccessfullyDisproved) { string sAltResponse = WebCommunications.SendPostRequest(Master.GetBaseURL() + Master.GetGameURL("Zendo") + "GrantEnlightenment", Master.BuildCommonBody(Master.BuildGameIDBodyPart(m_sGameID)), true); if (Master.CleanResponse(sAltResponse) != "") { pResponse = Master.ReadResponse(sAltResponse); } } else { string sKoan = data.GetStringExtra("Koan"); bool bHasBuddhaNature = data.GetBooleanExtra("HasBuddhaNature", false); string sBody = Master.BuildCommonBody(Master.BuildGameIDBodyPart(m_sGameID) + "<param name='sKoan'>" + sKoan + "</param><param name='bHasBuddhaNature'>" + bHasBuddhaNature + "</param>"); string sResponse = WebCommunications.SendPostRequest(Master.GetBaseURL() + Master.GetGameURL("Zendo") + "DisproveGuess", sBody, true); if (Master.CleanResponse(sResponse) != "") { pResponse = Master.ReadResponse(sResponse); } } } if (pResponse != null) { var pBuilder = new AlertDialog.Builder(this); pBuilder.SetMessage(pResponse.Element("Text").Value); pBuilder.SetPositiveButton("Ok", (e, s) => { return; }); pBuilder.Show(); } else if (bRestartRequested) { this.ForceRestart(); } else { this.GetUserBoard(); } } }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); this.SetContentView(Resource.Layout.Game_Zendo); // Create your application here base.CreateDrawer(); ScrollView pMainScroll = FindViewById <ScrollView>(Resource.Id.scrlZendoMain); pMainScroll.SetOnScrollChangeListener(this); SwipeRefreshLayout pRefresher = FindViewById <SwipeRefreshLayout>(Resource.Id.refresher); pRefresher.Refresh += delegate { // do things here! this.GetUserBoard(); pRefresher.Refreshing = false; }; // get game name string sGameName = this.Intent.GetStringExtra("GameName"); m_sGameName = sGameName; this.Title = "Zendo - " + sGameName; // get game id m_sGameID = this.Intent.Action; this.GetUserBoard(); Button pStartButton = FindViewById <Button>(Resource.Id.btnStart); pStartButton.Click += delegate { //string sBody = Master.BuildCommonBody(Master.BuildGameIDBodyPart(m_sGameID)); string sBody = "<params><param name='sGameID'>" + m_sGameID + "</param></params>"; string sResponse = WebCommunications.SendPostRequest(Master.GetBaseURL() + Master.GetGameURL("Zendo") + "StartGame", sBody, true); // TODO: handle response message this.GetUserBoard(); }; Button pGiveUp = FindViewById <Button>(Resource.Id.btnGiveUp); pGiveUp.Click += delegate { WebCommunications.SendPostRequest(Master.GetBaseURL() + Master.GetGameURL("Zendo") + "VoteToGiveUp", Master.BuildCommonBody(Master.BuildGameIDBodyPart(m_sGameID)), true); this.GetUserBoard(); }; Button pRules = FindViewById <Button>(Resource.Id.btnZendoRules); pRules.Click += delegate { Intent pIntent = new Intent(this, typeof(ZendoRulesActivity)); StartActivity(pIntent); }; }
private void GetUserBoard() { // send the request to the server string sBody = Master.BuildCommonBody(Master.BuildGameIDBodyPart(m_sGameID)); string sResponse = WebCommunications.SendPostRequest(Master.GetBaseURL() + Master.GetGameURL("Zendo") + "GetUserBoard", sBody, true); XElement pResponse = Master.ReadResponse(sResponse); if (pResponse.Attribute("Type").Value == "Error") { throw new Exception(pResponse.ToString()); } // get the specific parts XElement pStatusXml = pResponse.Element("Data").Element("Status"); XElement pActionXml = pResponse.Element("Data").Element("Action"); XElement pNumGuessesXml = pResponse.Element("Data").Element("NumGuesses"); XElement pMasterXml = pResponse.Element("Data").Element("Master"); XElement pPlayersXml = pResponse.Element("Data").Element("Players"); XElement pEventsXml = pResponse.Element("Data").Element("Events"); XElement pKoansXml = pResponse.Element("Data").Element("Koans"); TextView pGameStatusText = FindViewById <TextView>(Resource.Id.txtGameStatus); pGameStatusText.Text = pStatusXml.Element("Text").Value; // TODO: handle data tag in status FlowLayout pFlow = FindViewById <FlowLayout>(Resource.Id.flowStatusKoan); if (pStatusXml.Element("Data").Value != "") { string sKoan = pStatusXml.Element("Data").Element("Koan").Value; Master.FillKoanDisplay(this, pFlow, sKoan); LinearLayout.LayoutParams pParams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.FillParent, LayoutParams.WrapContent)); pParams.SetMargins(30, 0, 30, 30); pFlow.LayoutParameters = pParams; } else { pFlow.RemoveAllViews(); LinearLayout.LayoutParams pParams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.FillParent, LayoutParams.WrapContent)); pParams.SetMargins(0, 0, 0, 0); pFlow.LayoutParameters = pParams; } // set the action button accordingly Button pActionButton = FindViewById <Button>(Resource.Id.btnAction); Button pGiveUpButton = FindViewById <Button>(Resource.Id.btnGiveUp); pGiveUpButton.Enabled = true; pActionButton.Enabled = true; string sAction = pActionXml.Value; pActionButton.Click -= m_pActionButtonDelegate; if (sAction == "join") { pActionButton.Text = "Join Game"; m_pActionButtonDelegate = delegate { string sResponse2 = WebCommunications.SendPostRequest(Master.GetBaseURL() + Master.GetGameURL("Zendo") + "JoinGame", sBody, true); XElement pResponse2 = Master.ReadResponse(sResponse2); var pBuilder = new AlertDialog.Builder(this); pBuilder.SetMessage(pResponse2.Element("Text").Value); pBuilder.SetPositiveButton("Ok", (e, s) => { this.GetUserBoard(); }); pBuilder.Show(); }; } else if (sAction == "initial") { pActionButton.Text = "Create Initial Koans"; m_pActionButtonDelegate = delegate { Intent pIntent = new Intent(this, (new ZendoCreateRuleActivity()).Class); this.StartActivityForResult(pIntent, 0); }; } else if (sAction == "build") { pActionButton.Text = "Build Koan"; m_pActionButtonDelegate = delegate { Intent pIntent = new Intent(this, (new ZendoBuildKoanActivity()).Class); pIntent.PutExtra("Koans", pKoansXml.ToString()); this.StartActivityForResult(pIntent, 0); }; } else if (sAction == "judge") { pActionButton.Text = "Analyze Koan"; m_pActionButtonDelegate = delegate { Intent pIntent = new Intent(this, (new ZendoJudgeKoanActivity()).Class); pIntent.PutExtra("Koan", pStatusXml.Element("Data").Element("Koan").Value); pIntent.PutExtra("Rule", pMasterXml.Attribute("Rule").Value); this.StartActivityForResult(pIntent, 0); }; } else if (sAction == "predict") { pActionButton.Text = "Predict Master's Analysis"; m_pActionButtonDelegate = delegate { Intent pIntent = new Intent(this, (new ZendoPredictActivity()).Class); pIntent.PutExtra("Koan", pStatusXml.Element("Data").Element("Koan").Value); pIntent.PutExtra("Koans", pKoansXml.ToString()); this.StartActivityForResult(pIntent, 0); }; } else if (sAction == "disprove") { pActionButton.Text = "Disprove Guess"; m_pActionButtonDelegate = delegate { Intent pIntent = new Intent(this, typeof(ZendoDisproveActivity)); pIntent.PutExtra("Guess", pStatusXml.Attribute("Guess").Value); pIntent.PutExtra("Rule", pMasterXml.Attribute("Rule").Value); this.StartActivityForResult(pIntent, 0); }; } else if (sAction == "final") { pActionButton.Text = "Game Over!"; pActionButton.Enabled = false; pGiveUpButton.Enabled = false; } else if (sAction == "waiting") { pActionButton.Text = "Waiting..."; pActionButton.Enabled = false; } pActionButton.Click += m_pActionButtonDelegate; // set number of guesses int iNumGuesses = Convert.ToInt32(pNumGuessesXml.Value); Button pGuessButton = FindViewById <Button>(Resource.Id.btnGuess); pGuessButton.Text = "Guess (" + iNumGuesses.ToString() + " guess tokens)"; if (iNumGuesses > 0 && sAction == "build") { pGuessButton.Enabled = true; } else { pGuessButton.Enabled = false; } pGuessButton.Click -= m_pGuessButtonDelegate; m_pGuessButtonDelegate = delegate { Intent pIntent = new Intent(this, typeof(ZendoGuessActivity)); pIntent.PutExtra("Koans", pKoansXml.ToString()); this.StartActivityForResult(pIntent, 0); }; pGuessButton.Click += m_pGuessButtonDelegate; // set master label string sMaster = pMasterXml.Value; TextView pMaster = FindViewById <TextView>(Resource.Id.txtMaster); pMaster.Text = "Master - " + sMaster; // fill players box LinearLayout pPlayersLayout = FindViewById <LinearLayout>(Resource.Id.lstPlayers); pPlayersLayout.RemoveAllViews(); foreach (string sPlayer in pPlayersXml.Elements("Player")) { View pDataRow = LayoutInflater.From(this).Inflate(Resource.Layout.DataRow, pPlayersLayout, false); TextView pDataText = pDataRow.FindViewById <TextView>(Resource.Id.txtText); pDataText.Text = sPlayer; pPlayersLayout.AddView(pDataRow); } // fill log event box LinearLayout pLogLayout = FindViewById <LinearLayout>(Resource.Id.lstLog); pLogLayout.RemoveAllViews(); //foreach (XElement pEvent in pEventsXml.Elements("LogEvent")) List <XElement> pEventsXmlChildren = pEventsXml.Elements("LogEvent").ToList(); for (int i = pEventsXmlChildren.Count - 1; i >= 0; i--) { XElement pEvent = pEventsXmlChildren[i]; string sMsg = pEvent.Element("Message").Value; // make the datarow layout View pDataRow = LayoutInflater.From(this).Inflate(Resource.Layout.DataRow, pLogLayout, false); TextView pDataText = pDataRow.FindViewById <TextView>(Resource.Id.txtText); pDataText.Text = sMsg; // check the data tag XElement pData = pEvent.Element("Data"); if (pData.Value != "") { string sKoanContents = pEvent.Element("Data").Element("Koan").Value; FlowLayout pDataRowFlow = pDataRow.FindViewById <FlowLayout>(Resource.Id.flowDataRowKoan); Master.FillKoanDisplay(this, pDataRowFlow, sKoanContents); LinearLayout.LayoutParams pParams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.FillParent, LayoutParams.WrapContent)); pParams.SetMargins(20, 0, 20, 20); pDataRowFlow.LayoutParameters = pParams; } // add the data row pLogLayout.AddView(pDataRow); } // fill koans box LinearLayout pKoansLayout = FindViewById <LinearLayout>(Resource.Id.lstKoans); pKoansLayout.RemoveAllViews(); List <XElement> pKoansXmlChildren = pKoansXml.Elements("Koan").ToList(); for (int i = pKoansXmlChildren.Count - 1; i >= 0; i--) { XElement pKoan = pKoansXmlChildren[i]; View pView = LayoutInflater.From(this).Inflate(Resource.Layout.Game_ZendoKoanRow, pKoansLayout, false); FlowLayout pKoanBoxFlow = pView.FindViewById <FlowLayout>(Resource.Id.lstKoanImages); string sKoanText = pKoan.Value; Master.FillKoanDisplay(this, pKoanBoxFlow, sKoanText); /*List<string> lPieces = Master.GetPieceParts(sKoanText); * foreach (string sPiece in lPieces) * { * int iRes = Master.GetPieceImage(sPiece); * if (iRes == 0) { continue; } // TODO: error handling?Jk;lw * * ImageView pKoanView = new ImageView(this); * pKoanView.SetImageResource(iRes); * pFlow.AddView(pKoanView); * }*/ pKoansLayout.AddView(pView); } }