1.矩形碰撞检测
假如用左下点与右上点这两个点表示一个矩形,那么现在有两个矩形:
{(minX1,minY1),(maxX1,maxY1)}
{(minX2,minY2),(maxX2,maxY2)}
如果两个矩形相交,则:
minX = max(minX1,minX2)
minY = max(minY1,minY2)
maxX = min(maxX1,maxX2)
maxY = min(maxY1,maxY2)
相交的矩形坐标为:
{(minX,minY),(maxX,maxY)}
如果计算的矩形不相交,则满足:
minX > maxX 或者 minY > maxY
2.洗牌算法与排序
Random.Next() 返回一个非负随机整数。
public virtual int Next()
Random.Next(Int32) 返回一个小于所指定最大值的非负随机整数。
public virtual int Next( int maxValue )
public virtual int Next( int minValue, int maxValue )
int.Parse(string)
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
public static void Main()
{
Convert(" 179 ");
Convert(" -204 ");
Convert(" +809 ");
Convert(" 178.3");
Console.ReadLine();
}
private static void Convert(string value)
{
try
{
int number = int.Parse(value);//将数字的字符串表示形式转换为它的等效 32 位有符号整数。
Console.WriteLine("Converted '{0}' to {1}.", value, number);
}
catch (FormatException)
{
Console.WriteLine("Unable to convert '{0}'.", value);
}
}
// This example displays the following output to the console:
// Converted ' 179 ' to 179.
// Converted ' -204 ' to -204.
// Converted ' +809 ' to 809.
// Unable to convert ' 178.3'.
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int a = 10;
int b = 8;
int c = 10;
int d = 12;
Console.WriteLine(a.CompareTo(b));//大于 返回1
Console.WriteLine(a.CompareTo(c));//等于 返回0
Console.WriteLine(a.CompareTo(d));//小于 返回-1
Console.ReadLine();
}
}
}
List.Sort()
(这里为什么int.CompareTo能起到排序的作用呢?int.CompareTo返回-1,0,1这三种值,通过对List进行遍历,前后元素进行比较,如果返回0,则前后位置不变,如果返回-1或者1则位置调换,从而起到排序的作用,类似于冒泡算法)
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
List list = new List();
list.Add(-2);
list.Add(10);
list.Add(8);
list.Add(6);
list.Add(4);
//1
list.Sort();
Print(list);//输出-2,4,6,8,10 从小到大排序
//2
list.Sort
(
delegate(int a, int b)
{
return a.CompareTo(b);
}
);
Print(list);//输出-2,4,6,8,10 从小到大排序
//3
list.Sort((a, b) => b.CompareTo(a));
Print(list);//输出10,8,6,4,-2 从大到小排序
Console.ReadLine();
}
static void Print(List list)
{
for (int i = 0; i < list.Count; i++)
Console.WriteLine("{0}",list[i]);
Console.WriteLine();
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
洗牌算法一:使用数组
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
int[] array = new int[10];
for (int i = 0; i < array.Length; i++)
{
array[i] = i + 1;
}
Random random = new Random();
for (int i = 0; i < array.Length; i++)//打乱的次数
{
int randomIndex = random.Next(0, array.Length);//Next(int,int)只能取下限不能取上限
int temp = array[i];
array[i] = array[randomIndex];
array[randomIndex] = temp;
}
foreach (int a in array)
{
Console.WriteLine(a);
}
Console.ReadLine();
}
}
}
洗牌算法二:使用list
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
List originList = new List();
List reshuffleList = new List();
for (int i = 0; i < 10; i++)
{
originList.Add(i + 1);
}
Random random = new Random();
int count = originList.Count;
for (int i = 0; i < count; i++)
{
int randomIndex = random.Next(0,originList.Count);
reshuffleList.Add(originList[randomIndex]);
originList.RemoveAt(randomIndex);
}
for (int i = 0; i < reshuffleList.Count; i++)
{
Console.WriteLine(reshuffleList[i]);
}
Console.ReadLine();
}
}
}
reshuffleList.Sort();//从小到大排序
reshuffleList.Sort
(
(a,b) => b.CompareTo(a)
);//从大到小排序
以上的是int类型的排序,如果是string类型的排序呢:
1.如果string是数字转换过来的,则用int.Parse(string)结合List.Sort()
2.将List转换为Array,然后Array.Sort()