1.HP구현
HP바를 구현하기 위해 칸을 표시할 back과 남은 피를 표시할 front를 만든다
Hp의 줄어듬을 표현하기 위해 front의 앵커(Anchors)의 피벗(Privot)을 0(기본값 0.5) 으로 수정
(이유: 0.5일때는 중심을 기준으로 크기가 변경되지만 0으로 수정된 상태에서는 왼쪽을 기준으로 크기가 줄어듬)
2.위로 올라가는 탄
Food(탄)과 Cat(몹)의 충돌구현을 위해 Food에 Circle Collider 2D와 Rigidbody 2D를 넣어줘야 된다. 하지만 Rigidbody 2D는 중력에 영향을 받기 때문에 설정을 바꿔줘야 된다.
(바디 타입을 Dynamic(기본값)을 Kinematic(키네마틱: 중력영향을 안받음)으로 수정)
하지만 Kinematic의 단점으로 OnTriggerEnter2D로 Collider2D의 충돌 감지 정확성이 낮아짐
해결방법 Collider2D에서 Is Trigger(트리거)를 On
3.마우스에 따라 이동하며 벽으로 인해 이동 제한 구현
void Update()
{
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
float x =mousePos.x;
if (x > 8.5f)
{
x = 8.5f;
}
if (x < -8.5f)
{
x = -8.5f;
}
transform.position = new Vector3(x, transform.position.y, 0);
}
public int type;
void Update()
{
if(energy < full)//배고픔이 풀이 아닐때
{
if(type == 0)
{
transform.position += new Vector3(0, -0.05f, 0);//이동속도
}
else if(type == 1)
{
transform.position += new Vector3(0, -0.03f, 0);
}
else if (type == 2)
{
transform.position += new Vector3(0, -0.1f, 0);
}
if (transform.position.y < -16f)
{
gameManager.I.gameOver();
}
}
else
{
if (transform.position.x > 0)
{
transform.position += new Vector3(0.05f, 0, 0);//기준점인 x값이 양수일 때 오른쪽으로 이동하며 퇴장
}
else
{
transform.position += new Vector3(-0.05f, 0, 0);//기준점인 x값이 0과 음수일 때 오른쪽으로 이동하며 퇴장
}
Destroy(gameObject,3.0f); // 퇴장시 3초뒤에 사라짐
}
}
5.충돌에 관한 소스(cat.cs)
void OnTriggerEnter2D(Collider2D coll)
{
if (coll.gameObject.tag == "food")
{
if (energy < full)
{
energy += 1.0f;
Destroy(coll.gameObject);//cat과 food가 충돌시 food를 삭제
gameObject.transform.Find("hungry/Canvas/front").transform.localScale = new Vector3(energy / full, 1.0f, 1.0f); //체력바 조절
}
else
{
if(isFulll == false)
{
gameManager.I.addCat(); //레벨업을 위해 cat값을 기록
gameObject.transform.Find("hungry").gameObject.SetActive(false);
gameObject.transform.Find("full").gameObject.SetActive(true);
isFulll = true; //이미지 변경을 한번만 실행하기 위해 bool값 전환
}
}
}
}
6.처치한 고양이 수를 기록하여 레벨업 관련 소스
public void addCat()
{
cat++;
level = cat / 5;
levelText.text = level.ToString();
levelFront.transform.localScale = new Vector3((cat - level * 5) / 5.0f, 1.0f, 1.0f);
}
7.레벨업으로 인해 고양이 생성 수 변화(레벨 난이도 설정)
void makeCat()
{
Instantiate(normalCat);
if(level == 1)
{
float p = Random.Range(0, 10);
if (p < 2) Instantiate(normalCat);
}
else if (level == 2)
{
float p = Random.Range(0, 10);
if (p < 5) Instantiate(normalCat);
}
else if (level == 3)
{
float p = Random.Range(0, 10);
if (p < 6) Instantiate(normalCat);
Instantiate(fatCat);
}
else if (level >= 4)
{
float p = Random.Range(0, 10);
if (p < 7) Instantiate(normalCat);
Instantiate(fatCat);
Instantiate(pirateCat);
}
}
string "12ab34"를 int형 "1234"로 출력하는 것
내가 짠 코드
string input = "12ab34";
int output;
char c = 'a';
for (int i = 0; i < 26; i++)
{
input = input.Replace(c, ' ');
c++;
}
input = input.Replace(" ", "");
output = Convert.ToInt32(input);
Console.WriteLine(output);
구글에서 찾은 코드 1번 째
//(\d는 숫자, \D는 숫자가 아닌 문자)
using System.Text.RegularExpressions;
{
string input = "12ab34";
Console.WriteLine(Regex.Replace(input, @"\D", ""));
}
구글에서 찾은 코드 2번 째
{
string number = "12ab34";
string empty_str = string.Empty; //Empty는 ""와 비슷하지만 객체(object)를 생성하지 않음
for (int i = 0; i < number.Length; i++)
{
if (Char.IsDigit(number[i])) //문자가 숫자인지 구별하는 매서드(char타입을 넣어야됨)
empty_str += number[i];
}
Console.WriteLine(empty_str);
}
사람마다 짠 코드가 너무 달라 신기했으며 클래스나 메서드를 잘 이용하면 수월하게 짤수있다는 것을 느낌.
메모리를 적게 사용하기 위해 초기화시 NULL과 Empty를 자주 사용해야겠다는 생각을 했음.
다른사람이 짠 코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study
{
internal class Program
{
static void Main(string[] args)
{
string input = Console.ReadLine();
string result = "";
for (int i = 0; i < input.Length; ++i)
{
char c = input.ElementAt(i);
if (IsNumber(c))
{
result += c;
}
}
Console.WriteLine("입력: {0}", input);
Console.WriteLine("결과: {0}", result);
}
static bool IsNumber(char c)
{
return c >= '0' && c <= '9';
}
}
}
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
string input = "12ab34";
// string input = Console.ReadLine();
string output = Regex.Replace(input, @"\D", "");//정규표현식 사용
Console.WriteLine(output);
// 출력 결과: 1234
}
}
using System.IO;
using System.Text.RegularExpressions;
string input = "12ab34";
string output = "";
output = Regex.Replace(input, @"\D", "");
Console.WriteLine(output);
using System;
{
string input = "12ab34";
int output = int.Parse(input.Remove(2, 2));
Console.WriteLine(output);
}
using System;
using System.Globalization;
string str = "12ab34";
string subStr1 = str.Substring(0, 2);
string subStr2 = str.Substring(4, 2);
Console.WriteLine(subStr1 + subStr2); (편집됨)
using System;
class Program
{
static void Main() {
string input="12ab34";
string output=input.Replace("ab","");
Console.Write(output);
}
}
string str = Console.ReadLine();
foreach (char strSplit in str)
{
if ('0' <= strSplit && strSplit <= '9')
{
Console.Write(strSplit);
}
}
using System;
namespace testapp1
{
class Program
{
static void Main(string[] args)
{
Console.Write("input keyword : ");
string keyword = Console.ReadLine();
while (keyword.Length < 1)
{
Console.Write("input keyword : ");
keyword = Console.ReadLine();
}
Console.WriteLine(keyword + "...Convert");
char[] c_keyword = keyword.ToCharArray();
int[] pre_ret = new int[keyword.Length];
int j=0;
for (int i=0; i<keyword.Length; i++)
{
try
{
pre_ret[j] = Convert.ToInt32(c_keyword[i].ToString());
j++;
}
catch (FormatException ex)
{
}
}
int ret=0;
for (int i = j-1; i >= 0; i--)
ret += pre_ret[i] * (int) Math.Pow(10,(j-i-1));
Console.WriteLine(ret);
Console.ReadLine();
}
}
}
string a = "12ab34";
string s = "";
for(int i = 0; i < a.Length; i++)
{
if (a[i] >= '0' && a[i] <= '9') s += a[i];
}
int result = Convert.ToInt32(s);
Console.WriteLine(result);
string Input = "12ab34";
string OutPut = "";
for (int arrnum = 0; arrnum < Input.Length; arrnum++)
{
bool _checkNum = int.TryParse(Input[arrnum].ToString(),out int _out);
if (_checkNum == true)
{
OutPut += Input[arrnum];
}
}
Console.WriteLine(OutPut);
using System;
using System.Text.RegularExpressions;
public class sprQ
{
public static void Main(string[] args)
{
string Value = "12ab34";
string result = Regex.Replace(Value, @"\D", "");
Console.WriteLine("input = " + "\""+ Value + "\"");
Console.WriteLine("output = " + result);
}
}