贪吃蛇 WPF
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes; namespace WPFSnake
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private DispatcherTimer timer; public int bodyCount = ;
public Direction direct = Direction.Right; //public BodyCell[] cells;
public List<BodyCell> cells;
public Image food; public MainWindow()
{
InitializeComponent(); } private void panel_Loaded(object sender, RoutedEventArgs e)
{
} private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
cells = new List<BodyCell>(); for (int i = ; i < bodyCount; i++)
{ BodyCell cell = new BodyCell();
double left = i * ;
double top = panel.Height / ;
Canvas.SetLeft(cell, left);
Canvas.SetTop(cell, top); //cell.Margin.Top= panel.Height / 2; cells.Add(cell);
panel.Children.Add(cell);
} food = new Image();
food.Height = ;
food.Width = ;
BitmapImage pic = new BitmapImage(new Uri("Image/bg.jpg", UriKind.Relative));
food.Source = pic;
Random rY = new Random();
double ftop = rY.Next(, ) * ;
Random rX = new Random();
double fleft = rX.Next(, ) * ;
//food.Margin = new Thickness(fleft, ftop, 0, 0);
Canvas.SetTop(food, ftop);
Canvas.SetLeft(food, fleft);
panel.Children.Add(food); timer = new DispatcherTimer();
timer.Tick += timer_Tick;
timer.Interval = TimeSpan.FromMilliseconds();
timer.Start();
} private void timer_Tick(object sender, EventArgs args)
{
SnakeProcess(); if (GameOver())
{
MessageBox.Show("Game Over.");
timer.Stop();
}
} private void SnakeProcess()
{
#region 移动
#region 版本1
for (int i = bodyCount - ; i >= ; i--)
{
if (cells[i].direct == Direction.Right)
{
//cells[i].Left += 10;
Canvas.SetLeft(cells[i], Canvas.GetLeft(cells[i]) + );
}
else if (cells[i].direct == Direction.Left)
{
//cells[i].Left -= 10;
Canvas.SetLeft(cells[i], Canvas.GetLeft(cells[i]) - );
}
else if (cells[i].direct == Direction.Up)
{
//cells[i].Top -= 10;
Canvas.SetTop(cells[i], Canvas.GetTop(cells[i]) - );
}
else if (cells[i].direct == Direction.Down)
{
//cells[i].Top += 10;
Canvas.SetTop(cells[i], Canvas.GetTop(cells[i]) + );
}
}
for (int i = ; i < bodyCount - ; i++)
{
cells[i].direct = cells[i + ].direct;
} #endregion #region 版本2 //for (int i = bodyCount - 1; i > 0; i--)
//{
// cells[i - 1] = cells[i];
//}
//if (cells[bodyCount - 1].direct == Direction.Right)
//{
// cells[bodyCount - 1].Margin.Left += 10;
//}
//else if (cells[bodyCount - 1].direct == Direction.Left)
//{
// cells[bodyCount - 1].Left -= 10;
//}
//else if (cells[bodyCount - 1].direct == Direction.Up)
//{
// cells[bodyCount - 1].Top -= 10;
//}
//else if (cells[bodyCount - 1].direct == Direction.Down)
//{
// cells[bodyCount - 1].Top += 10;
//}
#endregion
#endregion #region 吃食物
EatFood();
#endregion
} private bool GameOver()
{
bool isOver = false;
//撞墙
double top = Canvas.GetTop(cells[bodyCount - ]);
double left = Canvas.GetLeft(cells[bodyCount - ]);
if (top == && cells[bodyCount - ].direct == Direction.Up)
{
isOver = true;
}
if (top == && cells[bodyCount - ].direct == Direction.Down)
{
isOver = true;
}
if (left == && cells[bodyCount - ].direct == Direction.Left)
{
isOver = true;
}
if (left == && cells[bodyCount - ].direct == Direction.Right)
{
isOver = true;
} //撞自己
for (int i = bodyCount - ; i >= ; i--)
{
if (Canvas.GetTop(cells[i]) == Canvas.GetTop(cells[bodyCount - ]) && Canvas.GetLeft(cells[i]) == Canvas.GetLeft(cells[bodyCount - ]))
{
isOver = true;
break;
}
}
return isOver;
} private void EatFood()
{
BodyCell head = cells[bodyCount - ];
if (Canvas.GetTop(cells[bodyCount - ]) == Canvas.GetTop(food) && Canvas.GetLeft(cells[bodyCount - ]) == Canvas.GetLeft(food))
{
BodyCell cell = new BodyCell();
panel.Children.Add(cell);
cell.direct = head.direct;
if (head.direct == Direction.Up)
{
//cell.Top = head.Top - 10;
//cell.Left = head.Left;
Canvas.SetTop(cell, Canvas.GetTop(head) - );
Canvas.SetLeft(cell, Canvas.GetLeft(head));
}
else if (head.direct == Direction.Down)
{
//cell.Top = head.Top + 10;
//cell.Left = head.Left;
Canvas.SetTop(cell, Canvas.GetTop(head) + );
Canvas.SetLeft(cell, Canvas.GetLeft(head)); }
else if (head.direct == Direction.Left)
{
//cell.Top = head.Top;
//cell.Left = head.Left - 10;
Canvas.SetTop(cell, Canvas.GetTop(head));
Canvas.SetLeft(cell, Canvas.GetLeft(head) - );
}
else if (head.direct == Direction.Right)
{
//cell.Top = head.Top;
//cell.Left = head.Left + 10;
Canvas.SetTop(cell, Canvas.GetTop(head));
Canvas.SetLeft(cell, Canvas.GetLeft(head) + );
}
cells.Add(cell); bodyCount++;
//lbl_Score.Text = (bodyCount - 5).ToString(); panel.Children.Remove(food); Random rY = new Random();
//food.Top = rY.Next(0, 30) * 10;
Canvas.SetTop(food, rY.Next(, ) * );
Random rX = new Random();
//food.Left = rX.Next(0, 30) * 10;
Canvas.SetLeft(food, rX.Next(, ) * );
panel.Children.Add(food);
}
} private void Window_KeyDown_1(object sender, KeyEventArgs e)
{
if (e.Key == Key.Up && cells[bodyCount - ].direct != Direction.Down)
{
//direct = Direction.Up;
cells[bodyCount - ].direct = Direction.Up;
}
else if (e.Key == Key.Left && cells[bodyCount - ].direct != Direction.Right)
{
//direct = Direction.Left;
cells[bodyCount - ].direct = Direction.Left;
}
else if (e.Key == Key.Down && cells[bodyCount - ].direct != Direction.Up)
{
//direct = Direction.Down;
cells[bodyCount - ].direct = Direction.Down;
}
else if (e.Key == Key.Right && cells[bodyCount - ].direct != Direction.Left)
{
//direct = Direction.Right;
cells[bodyCount - ].direct = Direction.Right;
}
if (e.Key == Key.Space)
{
if (timer.IsEnabled)
{
timer.Stop();
}
else
{
timer.Start();
}
}
}
} public class BodyCell : Image
{
public Direction direct
{ get; set; } public BodyCell()
: base()
{
this.Width = ;
this.Height = ;
direct = Direction.Right;
BitmapImage pic = new BitmapImage(new Uri("Image/bg.jpg", UriKind.Relative));
this.Source = pic; }
}
public enum Direction
{
Up,
Down,
Left,
Right
}
}
贪吃蛇 WPF的更多相关文章
- 基于C# WPF框架的贪吃蛇
游戏开始界面 游戏开始 共有两条蛇,吃到红色食物加1分,吃到绿色毒食物减1分,知道0不减: 碰到墙壁游戏结束,碰到对方游戏结束,碰到自己游戏结束 此游戏通过Canvas画布布局,通过C#代码实现 游戏 ...
- Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录
一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...
- 用C++实现的贪吃蛇游戏
我是一个C++初学者,控制台实现了一个贪吃蛇游戏. 代码如下: //"贪吃蛇游戏"V1.0 //李国良于2016年12月29日编写完成 #include <iostream& ...
- [LeetCode] Design Snake Game 设计贪吃蛇游戏
Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...
- JavaScript-简单的贪吃蛇小游戏
实现逻辑: //获取Html中的格子(行,列) //建立数组存储所有格子(x,y) //建立数组用于存储蛇身(x,y) //生成随机坐标(x,y)的函数 //随机创建蛇身并存储到蛇身数组 //创建食物 ...
- juery实现贪吃蛇的游戏
今天用juery做了一个贪吃蛇的游戏,代码比较简陋,不过作为这些天学习juery的成果,非常有成就感.另外关于代码内容如有雷同不胜荣幸. 更改了下 让头和身子的颜色不一样 这样好区分些,虽然还是不怎么 ...
- HTML 5 背离贪吃蛇 写成了类似于屏幕校准
中间写了改 改了写 还是没做出自己满意的效果 ,看来自己的确不是一个走前端的料子.当然h5还是学一点好一点 具体说来 就是 在canvas 的画布中 鼠标点击后画上一个圆形 然后就有随机的在画布上面出 ...
- 控制台游戏引擎CGE——贪吃蛇
今天我也来发一个控制台游戏.先看图: 缘起 LZ是一个有严重拖延症的人,表现的形式就是隔一段时间就要刷一刷博客园. 这不前几天,看到了魏大师<使用Lua脚本语言开发出高扩展性的系统...> ...
- 原生JS制作贪吃蛇小游戏
感情都在代码里,来,干了!... <!doctype html> <html> <head> <meta http-equiv="Content-T ...
随机推荐
- 只允许指定IP访问指定端口 ufw
那天工作需要在服务器上指定ip才可以访问指定端口,配置命令如下: (服务器是ubuntu 14.04系统) apt-get install ufw ufw enable ufw default den ...
- 力挺8天入门wpf【转载】
8天入门wpf—— 第八天 最后的补充 摘要: 从这一篇往前看,其实wpf中还有很多东西没有讲到,不过我的原则还是将比较常用的知识点过一遍,如果大家熟悉了这些知识,基本功也就打的差不多了,后续可以等待 ...
- toj2867 Picking Problem
题目链接:http://acm.tju.edu.cn/toj/showp.php?pid=2867 题目大意:给定一系列活动的开始时间和结束时间,问最多能参加的活动数目 思路:// 本题属于最大区间调 ...
- Vue.js快速入门
Vue.js介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们 ...
- UBUNTU系统常用基本命令
1.系统基本信息查询查看内核#uname -a 查看Ubuntu版本#cat /etc/issue 查看内核加载的模块#lsmod 查看PCI设备#lspci 查看USB设备#lsusb 查看网卡状态 ...
- github教程--廖雪峰的官方网站
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
- 计算一个数组里的重复值并且删去(java)
主要思想: 数组可以无序 假设数字里的值都为正 循环判断数组 如果与前面的数字相同则变为-1 然后记录-1的个数算出重复值 然后重新new一个减去重复值长度的新数组 和原数组判断 不为-1的全部复制进 ...
- 介绍一款管理软件Redmine
Redmine是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统,据说是源于Basecamp的ror版而来,支持多种数据库,有不少自己独特的功能,例如提供wiki. ...
- 基于excel9.h的excel处理
基于excel9.h的excel处理; #include "excel9.h" #include <iostream> using namespace std; cla ...
- 「北京」京东 JD.COM 招聘中/高级前端工程师
工作职责: 负责前端界面的前端构建,各类交互设计与实现: 前端样式和脚本的模块设计及优化: 协同后台开发人员完成项目: 职位要求: 专科及以上学历,2年以上前端重构与脚本开发经验,计算机或相关专业者优 ...