Sudoku
来源:互联网 发布:java源代码阅读工具 编辑:程序博客网 时间:2024/05/08 16:36
首先是游戏界面的设计:
以下三图分别为登陆注册/难度选择/游戏界面
登陆注册利用SQLITE实现,在引用SQLite for Universal Windows Platform和SQLitePCL,然后在登陆和注册按钮处分别添加CLICK事件:
private void add_database() { string tit = textBox.Text; //Insert var db = App.conn; using (var custstmt = db.Prepare("INSERT INTO User (Name) VALUES (?)")) { custstmt.Bind(1, tit); custstmt.Step(); } } private bool BtnGetAll() { var db = App.conn; string word = textBox.Text; StringBuilder re = new StringBuilder(); using (var statement = db.Prepare("SELECT Name FROM User WHERE Name = ?")) { statement.Bind(1, word); while (SQLiteResult.ROW == statement.Step()) { re.Append((string)statement[0]); if (re.ToString() == word) return true; } } return false; }
然后是游戏难度的选择,在这个游戏里,我使用一个静态类来保存游戏信息
namespace Sudoku.Models{ public static class GameInfo { public static string GameLevel; public static int time; public static string UserName; }}
接着进入游戏:
我使用了一个MODELS存储数独游戏过程中的每一步骤:
每一步用一个ITEM表示,数独九宫格里的数据用二维数组存储:
namespace Sudoku.Models{ class SudokuItem { public int[,] map; public SudokuItem(int[,] map) { this.map = new int[9,9]; for (int i = 0; i < 9; i++) for (int j = 0; j < 9; j++) this.map[i, j] = map[i, j]; } }}
namespace Sudoku.ViewModels{ class SudokuItemViewModel { private ObservableCollection<Models.SudokuItem> allItems = new ObservableCollection<Models.SudokuItem>(); public ObservableCollection<Models.SudokuItem> AllItems { get { return this.allItems; } } private Models.SudokuItem selectedItem = default(Models.SudokuItem); public Models.SudokuItem SelectedItem { get { return selectedItem; } set { this.selectedItem = value; } } public SudokuItemViewModel() { //test } public void AddSudokuItem(int[,] map) { this.allItems.Add(new Models.SudokuItem(map)); } public void RemoveSudokuItem() { } public void UpdateSudokuItem() { // set selectedItem to null after update this.selectedItem = null; } }}
在XAML里,用Grid控件划分出一个9x9的区域:
<Grid Name="grid" Grid.Row="0" > <Grid.RowDefinitions> <RowDefinition Height="0.1*"/> <RowDefinition Height="0.1*"/> <RowDefinition Height="0.1*"/> <RowDefinition Height="0.1*"/> <RowDefinition Height="0.1*"/> <RowDefinition Height="0.1*"/> <RowDefinition Height="0.1*"/> <RowDefinition Height="0.1*"/> <RowDefinition Height="0.1*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="0.1*"/> <ColumnDefinition Width="0.1*"/> <ColumnDefinition Width="0.1*"/> <ColumnDefinition Width="0.1*"/> <ColumnDefinition Width="0.1*"/> <ColumnDefinition Width="0.1*"/> <ColumnDefinition Width="0.1*"/> <ColumnDefinition Width="0.1*"/> <ColumnDefinition Width="0.1*"/> </Grid.ColumnDefinitions> </Grid>
然后在C#中往每个格子添加一个button,并为每个button绑定一个二维数组即题目,还可以添加背景图片:
private void InitMap(Grid thegrid,int[,] initmap) { thegrid.Children.Clear(); for (int i = 0; i <= 8; i++) { for (int j = 0; j <= 8; j++) { int fontsize = 20; Button numberGrid = new Button() { Tag = i.ToString() + j.ToString(), FontSize = fontsize}; numberGrid.SetValue(Grid.RowProperty, i); numberGrid.SetValue(Grid.ColumnProperty, j); if (initmap[i,j] == 0) numberGrid.Click += new RoutedEventHandler(ChooseButton); gridinfo.X = i; gridinfo.Y = j; Binding binding = new Binding(); binding.Source = gridinfo; binding.Converter = new Converter(); numberGrid.SetBinding(Button.ContentProperty, binding); numberGrid.Width = numberGrid.Height = 34 if (initmap[i, j] > 0 || !(thegrid == grid || thegrid == draftgrid)) { numberGrid.Background = new ImageBrush { ImageSource = new BitmapImage(new Uri(base.BaseUri, "Assets/darkGridItem.png")) }; } else { numberGrid.Background = new ImageBrush { ImageSource = new BitmapImage(new Uri(base.BaseUri, "Assets/lightGridItem.png")) }; } numberGrid.Content = (initmap[i, j] < 1) ? "" : numberGrid.Content; thegrid.Children.Add(numberGrid); }
数独九宫格的更新:
private void UpdateMap(Grid thegrid, int[,] map) { for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { var btn = thegrid.Children[i * 9 + j] as Button; btn.Content = map[i, j] != 0 ? map[i, j].ToString() : ""; } } }
计时器的实现:
DispatcherTimer myTimer = new DispatcherTimer(); myTimer.Interval = new TimeSpan(0, 0, 1);//获取或设置计时器刻度之间的时间段——设置myTimer的时间间隔是1秒 myTimer.Tick += Timer_Tick;//Tick是超过计时间隔发生的事件——即超过1秒触发事件Timer_Tick myTimer.Start();//计时器开始
0 0
- Sudoku
- sudoku
- Sudoku
- sudoku
- Sudoku
- Sudoku
- sudoku
- sudoku
- Sudoku
- Sudoku
- Sudoku
- Sudoku
- Sudoku
- Sudoku
- Sudoku
- Sudoku
- Sudoku
- Sudoku
- 3升和5升的不规则容器怎样量出4升的水
- 合并有序链表
- Linux学习 基本命令篇(五) Ubuntu硬盘分区管理
- CSS选择器
- 12球称重问题
- Sudoku
- 盲人摸扑克
- 从头学android_短信发送器
- 动态代理的简单实现
- [bzoj1584]打扫卫生
- 史上最全的Android ViewDragHelper解析
- 从二叉树的前序和中序得到后续遍历算法
- VLC架构剖析
- Storyboard学习四(Label)