182 lines
4.9 KiB
C#
182 lines
4.9 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using UnityEngine;
|
|||
|
|
using UnityEngine.InputSystem;
|
|||
|
|
|
|||
|
|
public class Chapter3 : MonoBehaviour, IEnumerator
|
|||
|
|
{
|
|||
|
|
int count = 11; //<2F>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> private
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
public bool MoveNext()=> --count >=0;// count<6E><74> 1<><31><EFBFBD><EFBFBD> <20><>Ű<EFBFBD><C5B0> 0<>̻<EFBFBD><CCBB≯<EFBFBD> true <20><>ȯ
|
|||
|
|
public object Current => count;// <20><><EFBFBD><EFBFBD> count <20><> <20><>ȯ
|
|||
|
|
public void Reset() => count = 11;// count <20><><EFBFBD><EFBFBD> 11<31><31> <20>ʱ<EFBFBD>ȭ
|
|||
|
|
|
|||
|
|
// enum<75><6D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ۼ<EFBFBD><DBBC>Ҽ<EFBFBD> <20>ְ<EFBFBD> <20>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ۼ<EFBFBD><DBBC>Ҽ<EFBFBD> <20>ִ<EFBFBD>.
|
|||
|
|
public enum BorderSide : byte// enum<75><6D> <20>⺻ <20>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD> int <20>̴<EFBFBD>.
|
|||
|
|
{
|
|||
|
|
Left = 1,
|
|||
|
|
Right, // 2
|
|||
|
|
Top = 4,
|
|||
|
|
Bottom // 5 <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31> <20><><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
// [Flags] // <20><>Ʈ <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>Ʈ
|
|||
|
|
// 2<><32> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><> Flags<67><73> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ°<CFB4> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>
|
|||
|
|
[Flags] // <20>־ <20>ǰ<EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ʈ <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ǥ<><C7A5><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
public enum FlagsEnum : byte
|
|||
|
|
{
|
|||
|
|
None = 0,
|
|||
|
|
A = 1 << 0, // 1
|
|||
|
|
B = 1 << 1, // 2
|
|||
|
|
C = 1 << 2, // 4
|
|||
|
|
D = 1 << 3 // 8
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void Start()
|
|||
|
|
{
|
|||
|
|
// FlagsEnum <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϱ<EFBFBD>
|
|||
|
|
foreach (FlagsEnum flag in Enum.GetValues(typeof(FlagsEnum)))
|
|||
|
|
{
|
|||
|
|
Debug.Log($"Flag: {flag}, Value: {(byte)flag}");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Stack <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
Stack<int> intStack = new Stack<int>();
|
|||
|
|
intStack.Push(10);
|
|||
|
|
intStack.Push(20);
|
|||
|
|
Debug.Log(intStack.Pop()); // 20 <20><><EFBFBD><EFBFBD>
|
|||
|
|
Debug.Log(intStack.Pop()); // 10 <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
// Swap <20><><EFBFBD><EFBFBD> <20><EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
int x = 5, y = 10;
|
|||
|
|
Debug.Log($"Before Swap: x = {x}, y = {y}");
|
|||
|
|
Swap<int>(ref x, ref y);
|
|||
|
|
Debug.Log($"After Swap: x = {x}, y = {y}");
|
|||
|
|
|
|||
|
|
// Initialize <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
MyClass[] myClassArray = new MyClass[3];
|
|||
|
|
Initialize<MyClass>(myClassArray);
|
|||
|
|
foreach (var item in myClassArray)
|
|||
|
|
{
|
|||
|
|
Debug.Log(item != null ? $"{item}" : "Null");
|
|||
|
|
}
|
|||
|
|
// Initialize2 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
Initialize2<string>(new string[] { "Hello", "World", "!" });
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><D7B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Swap <20><EFBFBD><DEBC><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <typeparam name="T"></typeparam>
|
|||
|
|
/// <param name="a"></param>
|
|||
|
|
/// <param name="b"></param>
|
|||
|
|
void Swap<T>(ref T a, ref T b)
|
|||
|
|
{
|
|||
|
|
T temp = a;
|
|||
|
|
a = b;
|
|||
|
|
b = temp;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> new() <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> ȣ<><C8A3><EFBFBD>Ҽ<EFBFBD> <20>ִ<EFBFBD> <20><EFBFBD><DEBC><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <typeparam name="T"></typeparam>
|
|||
|
|
/// <param name="Array"></param>
|
|||
|
|
void Initialize<T>(T[] Array) where T : new() // class, struct <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < Array.Length; i++)
|
|||
|
|
{
|
|||
|
|
Array[i] = new T();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
void Initialize2<T>(T[] Array) where T : notnull // null <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < Array.Length; i++)
|
|||
|
|
{
|
|||
|
|
Debug.Log(Array[i]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Ȯ<>۵<EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
SpecialStack<int> specialStack = new SpecialStack<int>();
|
|||
|
|
void Update()
|
|||
|
|
{
|
|||
|
|
if (Keyboard.current.wKey.isPressed)
|
|||
|
|
{
|
|||
|
|
specialStack.PushWithLog(UnityEngine.Random.Range(1, 100));
|
|||
|
|
}
|
|||
|
|
if (Keyboard.current.sKey.isPressed)
|
|||
|
|
{
|
|||
|
|
specialStack.PopWithLog();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD><DEBC><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
Balloon redBalloon = new Balloon { Color = "Red" };
|
|||
|
|
Balloon blueBalloon = new Balloon { Color = "Blue" };
|
|||
|
|
|
|||
|
|
[ContextMenu("CompareBalloons")] /// <20><><EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD> <20><>Ŭ<EFBFBD><C5AC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public void CompareBalloons()
|
|||
|
|
{
|
|||
|
|
bool areEqual = redBalloon.Equals(blueBalloon);
|
|||
|
|
Debug.Log($"Are balloons equal? {areEqual}");// False <20><><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD> <20>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> public <20>̴<EFBFBD> <20><><EFBFBD><EFBFBD>,<2C>Լ<EFBFBD>...
|
|||
|
|
/// </summary>
|
|||
|
|
interface IEnumerator // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD> <20>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> public <20>̴<EFBFBD>
|
|||
|
|
{
|
|||
|
|
bool MoveNext();
|
|||
|
|
object Current { get; }
|
|||
|
|
void Reset();
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><D7B8><EFBFBD> <20><><EFBFBD>ø<EFBFBD>ȭ<EFBFBD><C8AD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20>Լ<EFBFBD><D4BC>̴<EFBFBD>.
|
|||
|
|
/// </summary>
|
|||
|
|
/// <typeparam name="T"></typeparam>
|
|||
|
|
class Stack<T>// Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> internal <20>̴<EFBFBD>
|
|||
|
|
{
|
|||
|
|
int position;
|
|||
|
|
T[] items = new T[100];
|
|||
|
|
public void Push(T i) => items[position++] = i;
|
|||
|
|
public T Pop() => items[--position];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20>Ļ<EFBFBD><C4BB><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <typeparam name="T"></typeparam>
|
|||
|
|
class SpecialStack<T> : Stack<T>
|
|||
|
|
{
|
|||
|
|
public void PushWithLog(T value)
|
|||
|
|
{
|
|||
|
|
Debug.Log($"Push: {value}");
|
|||
|
|
Push(value);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public T PopWithLog()
|
|||
|
|
{
|
|||
|
|
T value = Pop();
|
|||
|
|
Debug.Log($"Pop: {value}");
|
|||
|
|
return value;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
interface IEquatable<T> { bool Equals (T obj ); }/// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD>
|
|||
|
|
class Balloon : IEquatable<Balloon> // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
public string Color { get; set; }
|
|||
|
|
public bool Equals(Balloon other)
|
|||
|
|
{
|
|||
|
|
return this.Color == other.Color;
|
|||
|
|
}
|
|||
|
|
}
|