1. 程式人生 > >c#日誌(一)

c#日誌(一)

隧道 變量名 自加 != 嘗試 清屏 數字 還需 遇到

使用@字符時能讓字符串不識別轉義字符
關於加法運算符更多的使用;
1、字符串相加 用來連接兩個字符串 返回一個字符串
2、當一個字符串跟一個數字相加的話,首先把數字轉變成字符串,然後連接起來結果是字符串

算數運算符
前++:先自加1,再運算;
後++:先運算,在自加1;

邏輯運算符
&& 邏輯與 都為真 才為真
|| 邏輯或 有一個為真,就為真 //在同一個式 邏輯與的優先級大於邏輯或
! 邏輯非中
邏輯表達式的結果同樣是BOOL類型
&和&&的區別 &&判斷錯了一個後,就不接著判斷
& 判斷錯了一個後,還需要判斷


順序結構:程序從Main函數進入,從上到下一行一行的執行,不會落下任何一行
分支結構:if if-else
選擇結構:if else-if switch-case
循環結構:while do-while for foreach

異常捕獲
1、讓代碼變得堅強一點 需要使用try-catch來進行異常捕獲
語法:
try
{可能會出現異常的代碼;
}catch
{異常後要執行的代碼出現
}


switch-case (判斷閏年一般用 ((year%400==0)||(year%4==0&&year%100!=0))
語法:
switch(變量或者表達式的值)
{case "值1":要執行的代碼;
break;
case "值2":要執行的代碼;
break;
case "值3":要執行的代碼;
break;
。。。。。。
default:要執行的代碼;
break;
}


4、循環結構
while循環:
while(循環條件)
{
循環體;
}

5、do-while循環
語法:
do
{ 循環體
}
while(循環條件);



變量 可以被重新賦值 int a=1;
常量 不可被重新賦值 const int a=1;


6、枚舉
語法:
[public] enum 枚舉名
{
值1,
值2,
值3,
。。。。。。
}
public :訪問修飾符。公共的,哪的可以訪問
enum;聲明枚舉的關鍵字
枚舉就是一個變量類型
使用: 枚舉類型 變量名=枚舉類型.值; eg:Gender gender=Gender.男;

7、for循環
語法:
for(表達式1;表達式2;表達式3)
{
循環體;
}
表達式1一般為聲明循環變量,記錄循環的次數(int i=0;)
表達式2一般為循環條件(i<10)
表達式3一般為改變循環條件的代碼,使循環條件終有一天不在成立(i++)

8、類型轉換
使用convert 進行轉換 成功了就成功,失敗了就拋異常
int number =int(double).Parse("");
int.TryParse 嘗試著將一個字符串轉變成Int類型


將字符串類型轉換成枚舉類型
QQstate state=(QQstate)Enum.Parse(typeof(QQState),s);

int number=0;
bool b=int.TryParse("123",out number)
轉換成功 變為字符串
轉換失敗 變成0

9、coutinue
立即結束本次循環,判斷循環條件,
如果成立,進入下一次循環;否則,跳出循環

10、三元表達式
語法:
表達式1?表達式2:表達式3;
表達式一般為關系表達式
表達式1為True 表達式2
表達式2為Flase 表達式3

11、結構
可以幫助我們一次性聲明多個不同類型的變量
public struct 結構名
{
成員;
}

12、數組
一次性存儲多個相同類型的變量
語法:
數組類型[] 數組名 = new 數組類型 [數組長度];
int.MinValue int範圍內的最小值
int.MaxValue int範圍內的最大值
Array.Sort(nums);
只能針對數組做一個升序的排序
Array.Reverse(nums);
對數組進行反轉

15、方法
函數就是一堆代碼進行重用
函數的語法
[public] static 返回值類型 方法名([參數列表])
{
方法體;
}
public: 訪問修飾符,公開的,公共的,哪都能訪問。
static:靜態的
返回值類型:如果不需要寫返回值,寫void
方法名:
參數列表:完成這個方法所需要提供這個的條件,,小括號不能省略

return
1、在方法中返回要返回的值
2、立即結束本次方法

方法的調用方法
類名.方法名
******在某些情況下,類名可以省略,如果方法和Main()在一個類中,可以省略

3、不管是實參還是形參,都是在內存中開辟了空間

4、out、ref、params
<1>、out參數。
如果返回不同類型的值時,這是使用OUT參數
<2>、ref參數
能夠將一個變量帶入一個方法中進行改變,改變完成後,再將改變後的值帶出方法
ref參數要求方法外必須賦值
<3>、params可變參數
在方法裏數組int[]前面加params 可以將主函數裏方法的數組難為數值

5、方法的重載
指的即是方法的名稱相同,但參數不同(跟返回值沒有關系)

6、方法的遞歸
方法自己調用自己
找出一個文件夾中所有的文件

通過飛行棋來練習方法


遊戲規則

  1. 兩名玩家AB輪流擲骰子,誰先走完100格誰i就勝利
  2. 期間遇到4種情況 暫停(停止一回合) 地雷(後退4格) 時空隧道(前進10格) 幸運轉盤(兩種選擇 1交換位置 2轟炸)



GO !!!!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _24飛行棋
{
class Program
{
public static int[] Maps = new int[100];
public static int[] playerpos = new int[2];
static string[] playername = new string[2];
static void Main(string[] args) //主函數


{

Gameshow(); //調用函數Gameshow 畫地圖頭
#region 輸入玩家姓名 //玩家姓名的輸入
Console.WriteLine("請輸入玩家A的姓名");
playername[0] = Console.ReadLine();
while (playername[0]=="")

{
Console.WriteLine("玩家A的姓名不能為空");
Console.WriteLine("請輸入玩家A的姓名");
playername[0] = Console.ReadLine();

}
Console.WriteLine("請輸入玩家B的姓名");
playername[1] = Console.ReadLine();
while (playername[1] == ""||playername[1]==playername[0])
{
if (playername[1] == "")
{
Console.WriteLine("玩家B的姓名不能為空,請重新輸入");
Console.ReadLine();
}
else
{
Console.WriteLine("玩家B的姓名不能和玩家A的姓名相同,請重新輸入");
Console.ReadLine();
}



}
#endregion //清屏清屏
Console.Clear(); //清屏
Gameshow(); //畫地圖頭
Console.WriteLine("玩家{0}的姓名用A代替",playername[0]);
Console.WriteLine("玩家{0}的姓名用B代替", playername[1]);
initailmap(); //調用方法 特殊地點
DrawMap(); //畫地圖變化
while (playerpos[0] < 99 && playerpos[1] < 99) //循環調用 輪流擲骰子
{
playgame(0);
playgame(1);

} //while
Console.ReadKey();
}
public static void Gameshow() //遊戲地圖頭
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("\t\t\t\t********************");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("\t\t\t\t********************");
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("\t\t\t\t********************");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("\t\t\t\t***NM的飛行棋遊戲***");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("\t\t\t\t********************");
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("\t\t\t\t********************");
}
public static void initailmap() //特定地點
{
int[] Luckyturn ={ 6, 23, 40, 55, 69, 83 };//幸運轉盤; 1の
for (int i = 0; i < Luckyturn.Length; i++)//做一個FOR循環,最先I為下標,把數字裏的
{ //數字作為下標賦值給Maps數組,再賦值為1
int index1 = Luckyturn[i];
Maps[index1] = 1; ;
}
int[] Landmine = { 5,13,17,33,38,50,64,80,94};//地雷; 2 Ψ
for (int i = 0; i < Landmine.Length; i++)
{
int index2 = Landmine[i];
Maps[index2] = 2;
}
int[] pause = { 9,27,60,93};//暫停 3 〓
for (int i = 0; i < pause.Length; i++)
{
int index3 = pause[i];
Maps[index3] = 3;
}
int[] timetunnel = {20,25,45,63,72,88,90 };//時空隧道 4 卐
for (int i = 0; i < timetunnel.Length; i++)
{
int index4 =timetunnel[i];
Maps[index4] = 4;
}
}
public static void DrawMap() //每格相遇的機制
{
Console.WriteLine("圖例 の是幸運轉盤 Ψ是地雷 〓是暫停 卐是時空隧道");
#region 第一橫行
for (int i = 0; i < 30; i++)
{
if (playerpos[0] == playerpos[1] && playerpos[0] == i)
{
Console.Write("<>");
}
else if (playerpos[0] == i)
{
Console.Write("A");
}
else if (playerpos[1] == i)
{
Console.Write("B");
}
else
{
switch (Maps[i])
{
case 0:
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("□");
break;
case 1:
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("の"); //幸運轉盤
break;
case 2:
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.Write("Ψ"); //地雷
break;
case 3:
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write("〓"); //暫停
break;
case 4:
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("卐"); //時空隧道
break;
}
}
}
#endregion
Console.WriteLine();
#region 第一豎行
for (int i = 30; i < 35; i++)
{
for (int j = 0; j < 29; j++)
{
Console.Write(" ");
}
DrawstringMap(i);
Console.Write(DrawstringMap(i));
Console.WriteLine();
}
#endregion
#region 第二橫行
for (int i = 64; i > 35; i--)
{
Console.Write(DrawstringMap(i));
}
#endregion
#region 第二豎行
for (int i = 65; i < 71; i++)
{
Console.WriteLine(DrawstringMap(i));
}
#endregion
#region 第三橫行
for (int i = 70; i < 100; i++)
{
Console.Write(DrawstringMap(i)) ;
}
#endregion
Console.WriteLine();
}
public static string DrawstringMap(int i) //特殊地點
{
#region 畫圖
string str = "";
if (playerpos[0] == playerpos[1] && playerpos[0] == i)
{
str ="<>";
}
else if (playerpos[0] == i)
{
str="A";
}
else if (playerpos[1] == i)
{
str="B";
}
else
{
switch (Maps[i])
{
case 0:
Console.ForegroundColor = ConsoleColor.Gray;
str="□";
break;
case 1:
Console.ForegroundColor = ConsoleColor.Red;
str="の"; //幸運轉盤
break;
case 2:
Console.ForegroundColor = ConsoleColor.DarkGreen;
str="Ψ"; //地雷
break;
case 3:
Console.ForegroundColor = ConsoleColor.Blue;
str="〓"; //暫停
break;
case 4:
Console.ForegroundColor = ConsoleColor.Yellow;
str="卐"; //時空隧道
break;
}
}
#endregion
return str;
}
public static void playgame(int playnumber) //過程
{
Console.WriteLine("{0}按任意鍵開始擲骰子", playername[playnumber]);
Console.ReadKey(true);Random n = new Random();
int n1 = n.Next(1, 6);
Console.WriteLine("{0}擲出了{1}", playername[playnumber],n1);

playerpos[playnumber] += 4;
Console.ReadKey(true);
Console.WriteLine("{0}按任意鍵開始行動", playername[playnumber]);
Console.ReadKey(true);
Console.WriteLine("{0}行動完了", playername[playnumber]);
Console.WriteLine(true);
if (playerpos[playnumber] == playerpos[1-playnumber])
{
Console.WriteLine("玩家{0}踩到了玩家{1},玩家{1}推6格", playername[playnumber], playername[1- playnumber]);
playerpos[1- playnumber] -= 6;
Console.ReadKey(true);
}
else
{
switch (Maps[playerpos[playnumber]])
{
case 0:
Console.WriteLine("玩家{0}踩到方塊,安全", playername[1-playnumber]);
Console.ReadKey(true);
break;
case 1:
Console.WriteLine("玩家{0}踩到幸運轉盤,請選擇,1---交換位置,2---轟炸對方", playername[playnumber]);
string zhuanpan = Console.ReadLine();
if (zhuanpan == "1")
{
Console.WriteLine("玩家{0}選擇交換位置", playername[playnumber]);
int temp = playerpos[playnumber];
playerpos[playnumber] = playerpos[1-playnumber];
playerpos[1-playnumber] = temp;
Console.WriteLine("交換完成");
Console.ReadKey(true);

}
else if (zhuanpan == "2")
{
Console.WriteLine("玩家{0}選擇轟炸對方", playername[playnumber]);
playerpos[1] -= 6;
Console.WriteLine("轟炸完成");
Console.ReadKey(true);

}
else
{
Console.WriteLine("請輸入正確數字");
zhuanpan = Console.ReadLine();
}
break;

case 2:
Console.WriteLine("玩家{0}踩到地雷,向後退6格", playername[playnumber]);
Console.ReadKey(true);
playerpos[0] -= 6;
Console.WriteLine("後退完成");
Console.ReadKey(true);
break;
case 3:
Console.WriteLine("玩家{0}遇到暫停", playername[playnumber]);
Console.ReadKey(true);
break;
case 4:
Console.WriteLine("玩家{0}遇到時空隧道", playername[playnumber]);
playerpos[playnumber] += 10;
Console.ReadKey(true);
break;
} //switch
} //else
Console.Clear();
DrawMap();
Gameshow();

}
}
}

技術分享圖片

c#日誌(一)