2013-08-15 36 views
9

10 x 10 TextBox'lar oluşturdum ve kullanıcı kelimeleri kelimelerin konumu için ilgili TextBox'lara girmelidir. Ve böyle bir textfile içine her şeyi kaydedin: WPF'de bir bulmaca nasıl oluşturulur?

enter image description here

Sonra WPF tarafında, ben textfile okuyup bir panelde metin kutularının doldurmak ama sorun bulmaca aşağı olmasıdır ve kurşun ipuçları genelinde Cevap için size ve her ipucu hangisinin olduğunu gösteren bir sayıya sahip olacaktır. Bununla birlikte, sayıdaki bulmaca numarasını, ipuçlarına ve numaraya bağlamak için bir yol düşünemiyorum. Bu şimdiki gibi görünüyor:

enter image description here

Bildirim genelinde ve aşağı yanında sayılar (İstediğimi görselleştirmek için boya onları düzenlenebilir), ben numaralar görüntülenecek olduğunu gerekir. Benim veritabanında

, bir tablodaki dosyanın konumunu depolanır ve bunun gibi başka tablodaki tavsiyeleri ve cevap:

enter image description here

Ve bu (aşağı karşısında ve) ipuçları ve cevap: Ben genelinde ve aşağı almak için Varlık çerçeve lambda ifadeleri kullanıyorum

enter image description here

.

Numaraları atamadan Across and Down öğesine bağlamak için bu konuda herhangi bir yardımı takdir edin. Aşağı karşısında gösterilecek

protected void Across() 
    { 
     IList<ModelSQL.puzzlecontent> lstAcross = daoPuzzleContent.GetAcross(); 

     foreach (ModelSQL.puzzlecontent lista in lstAcross) 
     { 
      Label tbA = new Label(); 
      tbA.Content = lista.Hint; 
      tbA.Width = Double.NaN; 
      tbA.BorderBrush = Brushes.CadetBlue; 
      tbA.BorderThickness = new Thickness(2); 
      stackPanel1.Width = Double.NaN; 
      stackPanel1.Children.Add(tbA); 
      words.Add(lista.Answer); 

     } 
    } 

    protected void AddPuzzle() 
    { 
     // foldername of the txt file. 
     // using (StreamReader reader = File.OpenText((@daoWordPuzzle.GetfileURL()))) 
     string[] fileData = File.ReadAllLines(@"C:\Users\apr13mpsip\Desktop\OneOrganizer\OneOrganizer\WordPuzzle\educational.txt"); 

     string[] lineValues; 

     int row = 0; 
     int col; 
     int hint = 1; 

     string[][] rowcol = new string[fileData.Length][]; 

     foreach (string line in fileData) 
     { 
      lineValues = line.Split(new string[] { "," }, StringSplitOptions.None); 


      rowcol[row] = new string[lineValues.Length]; 

      col = 0; 

      foreach (string value in lineValues) 
      { 
       rowcol[row][col] = value; 
       col++; 
      } 
      row++; 

     } 


     for (int i = 0; i < rowcol.GetLength(0) ; i++) 
     { 
      for (int j = 0; j < rowcol[i].GetLength(0) ; j++) 
      { 


       int iadd = i+1 < rowcol.GetLength(0) ? i+1 : 100; 
       int iminus = i-1 >= 0 ? i-1 : 100; 
       int jadd = j+1 < rowcol.GetLength(0) ? j+1 : 100; 
       int jminus = j-1 >= 0 ? j-1 : 100; 
       var self = rowcol[i][j]; // current value 

       var top = iminus == 100 ? "" : rowcol[iminus][j]; 
       var bottom = iadd == 100 ? "" : rowcol[iadd][j]; 
       var left = jminus == 100 ? "" : rowcol[i][jminus]; 
       var right = jadd == 100 ? "" : rowcol[i][jadd]; 

       //ACROSS HORIZONTAL 
       if (
        (!String.IsNullOrEmpty(self) && !String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(top) && String.IsNullOrEmpty(left)) || 
        (!String.IsNullOrEmpty(self) && !String.IsNullOrEmpty(right) && String.IsNullOrEmpty(bottom) && !String.IsNullOrEmpty(top) && String.IsNullOrEmpty(left)) || 
        (!String.IsNullOrEmpty(self) && !String.IsNullOrEmpty(right) && String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(top) && String.IsNullOrEmpty(left)) || 
        (!String.IsNullOrEmpty(self) && !String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && !String.IsNullOrEmpty(top) && String.IsNullOrEmpty(left)) 
       ) 
       { 
        wordAcross = ""; 
        for (int k = 0; k < 10; k++) 
        { 
         wordAcross += rowcol[i][k]; 
         if (k == 9) 
         { 
          puzzlewordAcross.Add(wordAcross); 
          // print hello and live 
         } 
        } 

       } 

       //DOWN VERTICAL 
       if (
        (!String.IsNullOrEmpty(self) && String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(top) && !String.IsNullOrEmpty(left)) || 
        (!String.IsNullOrEmpty(self) && String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(top) && String.IsNullOrEmpty(left)) || 
        (!String.IsNullOrEmpty(self) && !String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(top) && String.IsNullOrEmpty(left)) 
        ) 
       { 

        wordDown = ""; 
        for (int k = 0; k < 10; k++) 
        { 
         wordDown += rowcol[k][j]; 
         if (k == 9) 
         { 
          puzzlewordDown.Add(wordDown); 
          // print holy and leducated 
         } 


        } 
       } 

       //Check Top , Left , Bottom , Right value.      
       if (
        (!String.IsNullOrEmpty(self) && String.IsNullOrEmpty(top) && !String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(left)) || 
        (!String.IsNullOrEmpty(self) && String.IsNullOrEmpty(top) && String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && !String.IsNullOrEmpty(left)) || 
        (!String.IsNullOrEmpty(self) && !String.IsNullOrEmpty(top) && !String.IsNullOrEmpty(right) && String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(left)) || 
        (!String.IsNullOrEmpty(self) && !String.IsNullOrEmpty(top) && !String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(left)) || 
        (!String.IsNullOrEmpty(self) && String.IsNullOrEmpty(top) && String.IsNullOrEmpty(right) && !String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(left)) || 
        (!String.IsNullOrEmpty(self) && String.IsNullOrEmpty(top) && !String.IsNullOrEmpty(right) && String.IsNullOrEmpty(bottom) && String.IsNullOrEmpty(left)) 

        ) 
       { 

        TextBox tbox = new TextBox(); 
        tbox.Height = 50; 
        tbox.Width = 50; 
        tbox.Text = hint.ToString(); 
        wrapPanel1.Children.Add(tbox); 



        tbox.GotFocus += (source, e) => 
        { 
         if (!string.IsNullOrEmpty(tbox.Text)) 
         { 
          string Str = tbox.Text.Trim(); 
          double Num; 
          bool isNum = double.TryParse(Str, out Num); 
          if (isNum) 
           tbox.Text = ""; 
         } 
         else 
         { 
          tbox.Text = ""; 
         } 

        }; 

        hint++; 
       } 
       else 
       { 
        TextBox tbox2 = new TextBox(); 
        tbox2.Height = 50; 
        tbox2.Width = 50; 
        if (String.IsNullOrEmpty(self)) 
        { 
         tbox2.Background = Brushes.Black; 
         tbox2.Focusable = false; 
        } 
        wrapPanel1.Children.Add(tbox2); 
       }// end of top bottom left right. 

      } 


     } 
    } // End of AddPuzzle() 

Kodu ve:

Bu

benim bulmaca görüntülemek için kodudur

protected void Down() 
    { 
     IList<ModelSQL.puzzlecontent> lstDown = daoPuzzleContent.GetDown(); 

     foreach (ModelSQL.puzzlecontent listd in lstDown) 
     { 
      Label tbD = new Label(); 
      tbD.Content = listd.Hint; 
      tbD.Width = Double.NaN; 
      tbD.BorderBrush = Brushes.CadetBlue; 
      tbD.BorderThickness = new Thickness(2); 
      stackPanel2.Width = Double.NaN; 
      stackPanel2.Children.Add(tbD); 


     } 
    } 

    protected void Across() 
    { 
     IList<ModelSQL.puzzlecontent> lstAcross = daoPuzzleContent.GetAcross(); 

     foreach (ModelSQL.puzzlecontent lista in lstAcross) 
     { 
      Label tbA = new Label(); 
      tbA.Content = lista.Hint; 
      tbA.Width = Double.NaN; 
      tbA.BorderBrush = Brushes.CadetBlue; 
      tbA.BorderThickness = new Thickness(2); 
      stackPanel1.Width = Double.NaN; 
      stackPanel1.Children.Add(tbA); 
      words.Add(lista.Answer); 

     } 
    } 
+0

Sorunun ne olduğundan emin değilim - Aşağı/Yanlış ipuçlarını belirli bir metin kutusuna mı bağlar? Metin kutusuna ipucu numarası mı yazıyor? Ayrıca, cevapları hem bir metin dosyasında hem de veritabanında saklıyor musunuz, yoksa metin dosyası yalnızca çapraz bulmaca oluşturulmasında mı? –

+0

textfile yalnızca cevabın konumunu kaydetmek ve bunları textfile kullanarak tekrar doldurmaktır. Metin kutularında bu sayıları görüyorum Across/Down ipuçlarıyla onları bağlamak zorundayım, tıpkı Tanrı için Rabbimiz o zaman bilecek ki kullanıcı 1 numaralı ipucu olacaktır. – user2376998

+0

Tamam, sadece cevabın da İpuçları tablosunda saklandığını fark ettim. Her neyse, senin sorunun ipuçlarını belirli bir pozisyona/metin kutusuna nasıl bağlayacaksın? Bunun ipuçlarıyla birlikte saklanması gerekiyor. "PuzzleContentID" in ne olduğundan emin değilim - bunun üzerine detay verebilir misiniz? –

cevap

1

seni düşünüyorum çünkü Burada yeniden tanımlamak için veri modeli gerekebilir ilk engelde - sistem analizi başarısız oldu. Sadece kod yazmak istediğimiz zaman hepimizi yakalıyor ve her zaman büyük bir refakatçi demektir.

Alanınızı burada düşünün. Çapraz bulmaca. Eğer bir gazete okuyorsak ve bir ipucu cevabını bilmiyorsanız, bir arkadaşınıza sorduğunuzda ne söylersiniz?

6 mektuplar, ipucu Bildiğiniz herhangi harflerle ardından 'filan'

... olduğunu.

Şimdi bilmecenin her cevapta kaç harf olduğunu ve her cevabın bir ipucu gerektirdiğini bilmesi gerektiğini biliyoruz. Ayrıca onları dolduruncaya kadar harflerin gizlendiğini biliyoruz, ancak bir noktada doğru cevabı bilmemiz gerekiyor.

Bulmacanın kendisi kağıdın arka kısmında nasıl bulunur? İpuçlar 1,2,3 vb. Olarak yazılmaz. Bunlar 4 aşağı, 1 tanesi vs.'dir. Artık kayıtlı bazı konum verilerinin gerekli olduğunu biliyoruz.

Bunu başarabilirsiniz 2 yol.

1.

'Tebrik'

'Hello' Açıklama '1,1' Yanıt Pozisyon 'karşısında' Yön

Clue '1' metin ile tamamlanan kendi girdi olarak her ipucu var

Kılavuzdan ızgara boyutunu hesaplayın ve uygun şekilde harfleri yerleştirin. Artıları: Çalışması kolay. Tek bir yerde tüm bilgiler Eksileri: Olası veri bozulması. Bu yöntem aynı pozisyonda 2 farklı harf tanımlayabilir. ızgara

yılında

2. Ayrı Girişler ama cevap metni Bu ilk ekran görüntüsünde göstermek gibi şimdi ama ayrı bir CSV ızgara içine metni nasıl çok benzer. Daha sonra, yöntem 1'deki gibi ipuçları için girdiniz var, ancak 'Cevap' alanını atlayın.

Kodunuz gerekir:

  • böylece bir CSV metin dosyasına kullanıcıların girdilerini dönüştürmek
    1. işten dışarı ızgara boyutu
    2. bir ızgara
    3. doldurmak ipuçlarının listesini doldurmak , girişleri yanıtlara karşı doğrulayabilir ve
    4. numaralı telefonu doğrulayabilirsiniz.

    İpuçlarını giriş metin kutularına bağlamak için. Her textbox'un Tooltip özelliğini, harfi içeren ipuçlarının açıklamalarını kullanarak ayarlayın. doğru anladılar.

    Son olarak (ve bu muhtemelen istediğiniz bit), giriş metin kutusuna doğru numarası eklemek, sen WPF'ın düzen boru hattı üzerinde yararlanmak zorundayız. Sadece bir metin kutusunu ızgaraya koyma, başka bir ızgara koy! Size XAML'de nasıl görüneceğini göstereceğim, ancak bunu kod içinde oluşturmak isteyebilirsiniz.

    <Grid> 
        <TextBlock x:Name="TextBlock_NumberLabel"/> 
        <TextBox x:Name="TextBox_LetterEntry"/> 
    <Grid> 
    

    Bunu, bir sayı istediğiniz herhangi bir karede düz bir metin kutusu yerine kullanın.

    +0

    Yanıtladığınız zaman ve çabayı takdir ediyorum. Bir ay önce programlamayı öğrenmeye başladığımdan, sadece bu kadar uzağa geldim. kötü ingilizce ve kötü anlama için üzgünüm. Buradaki asıl meselem, pozisyon numaralarını metin kutularının pozisyonuna göre ipuçlarına eklemek, böylece yaptığım her şey başlangıçta yanlış mıydı? Cevapların kontrolüne gelince, ben aslında ilk önce bir liste 'da doğru ans'ı eklemeyi planlıyorum, daha sonra kullanıcı giriş metnini listesine ekliyorum ve yanlış/doğru cevapları kontrol etmek için onları karşılaştırıyorum. – user2376998

    +0

    Metod 2'nizi 2 numaralı noktaya kadar anlıyorum, CSV ve materyaller hakkında bir fikrim var, bana alternatif bir yol sağladığınız için teşekkürler, akımım iyi çalışmıyorsa ona bakacağım. – user2376998

    +0

    CSV, 'virgülle ayrılmış değerler' anlamına gelir. Tabular veriler için ve zaten kullanmakta olduğunuz bir format. Öğe 3, ipuçlarının bir listesini kendilerinin yanındaki sayılarla göstermeniz gerektiğini ve kodunuzun bu listeyi verileri kullanarak oluşturması gerektiğini belirtir. – Gusdor