/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
FILENAME:TrisProblem.java
Compile:javac TrisProblem.java
Execution: java TrisProblem.class
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/

/*--------------------------------------------------------------------*/
package Tris.TrisPackage

/*--------------------------------------------------------------------*/
import java.io.Console;
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
class TrisProblem
{
public static void main(String[] args) 
{
//System.out.println("Hello World!");
TrisCls nm = new TrisCls();
nm.running();
}
}

/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
class TrisCls
{
//definition
final int MAPY=22;
final int MAPX=40;
final int MAXDESIGN=10;
final int ARR=3;
final int D_RRIGHT=1000;
final int D_LEFT=1002;
final int D_DOWN=1003;
final int TRUE=1;
final int FAIL=0;

//variables
int[][] tris = new int[MAPY][MAPX];
int[][] design = new int[ARR][ARR];
int xpos,ypos,score;
int hyun,next;

//int[][][] realdesign = new int[MAXDESIGN][ARR][ARR];
int[][][] realdesign =
{
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}},
{{1,1,1},{1,1,1},{1,1,1}}
};
//control

//method
public void running()
{
//
}
}
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/

/*정적 클래스 및 정적 클래스 멤버
정적 클래스 및 정적 클래스 멤버(C# 프로그래밍 가이드)*/

정적 클래스는 기본적으로 비정적 클래스와 동일하지만, 
정적 클래스는 인스턴스화할 수 없다는 한 가지 차이점이 있습니다. 
즉, new 연산자를 사용하여 클래스 형식의 변수를 만들 수 없습니다. 
인스턴스 변수가 없기 때문에 클래스 이름 자체를 사용하여 정적 클래스의 멤버에 액세스합니다. 
예를 들어 public static 메서드 MethodA를 포함하는 UtilityClass라는 정적 클래스가 있는 경우 
다음 예제와 같이 메서드를 호출합니다.

UtilityClass.MethodA();  

정적 클래스는 입력 매개 변수에 대해서만 작동하고 
내부 인스턴스 필드를 가져오거나 설정할 필요가 없는 메서드 집합에 대한 편리한 컨테이너로 사용할 수 있습니다. 
예를 들어 .NET 클래스 라이브러리의 정적 System.Math 클래스에는 
Math 클래스의 특정 인스턴스에 고유한 데이터를 저장하거나 검색할 필요 없이 수학 연산을 수행하는 메서드가 포함되어 있습니다. 
즉, 다음 예제와 같이 클래스 이름과 메서드 이름을 지정하여 클래스의 멤버를 적용합니다.

double dub = -3.14;  
Console.WriteLine(Math.Abs(dub));  
Console.WriteLine(Math.Floor(dub));  
Console.WriteLine(Math.Round(Math.Abs(dub)));  
  
// Output:  
// 3.14  
// -4  
// 3  

모든 클래스 형식과 마찬가지로, 
정적 클래스에 대한 형식 정보는 클래스를 참조하는 프로그램이 로드될 때 .NET 런타임에 의해 로드됩니다. 
프로그램에서 클래스가 로드되는 시기를 정확하게 지정할 수는 없습니다. 
그러나 클래스가 로드되도록 하고, 
프로그램에서 클래스를 처음으로 참조하기 전에 해당 필드가 초기화되고 정적 생성자가 호출되도록 합니다. 
정적 생성자는 한 번만 호출되며, 
프로그램이 있는 애플리케이션 도메인의 수명 동안 정적 클래스가 메모리에 유지됩니다.

>참고
자체 인스턴스 하나만 생성될 수 있도록 하는 비정적 클래스를 만들려면 C#에서 Singleton 구현을 참조하세요.

다음 목록은 정적 클래스의 주요 기능을 제공합니다.
1. 정적 멤버만 포함합니다.
2. 인스턴스화할 수 없습니다.
3. 봉인되어 있습니다.
4. 인스턴스 생성자를 포함할 수 없습니다.

따라서 정적 클래스를 만드는 것은 기본적으로 정적 멤버와 private 생성자만 포함된 클래스를 만드는 것과 동일합니다. 
private 생성자는 클래스가 인스턴스화되지 않도록 합니다. 
정적 클래스를 사용하면 컴파일러에서 인스턴스 멤버가 실수로 추가되지 않도록 확인할 수 있다는 장점이 있습니다. 
컴파일러는 이 클래스의 인스턴스를 만들 수 없도록 합니다.

정적 클래스는 봉인되므로 상속할 수 없습니다. 
Object를 제외하고 어떤 클래스에서도 상속할 수 없습니다. 
정적 클래스는 인스턴스 생성자를 포함할 수 없습니다. 
그러나 정적 생성자는 포함할 수 있습니다. 
또한 클래스에 특수한 초기화가 필요한 정적 멤버가 포함된 경우 비정적 클래스에서 정적 생성자도 정의해야 합니다. 
자세한 내용은 정적 생성자를 참조하세요.

this 키워드

this 키워드는 객체가 자기 자신을 가리키고 싶을때 사용하는 키워드입니다.
객체외부에서는 객체의 변수나 메소드에 접근할떄는 객체의 이름을 사용한다면, 
객체내부에서는, 자신의 변수나 메소드에 접근할때, this 키워드를 사용합니다.

class Student
{
    private string name;

    public void SetName(string name)
    {
        this.name = name;
    }
}

/*객체의 이해와 객체의 생성필요와 생성이 필요없는경우*/

객체(Object)

객체란 사물과 같은 유형적인것뿐만 아니라, 개념이나 논리와 같은 무형적인 것들을 객체라고
합니다. 프로그래밍에서의 객체는 클래스에 정의된 내용이 메모리에 생성된것을 뜻합니다.
클래스로부터 객체를 만드는과정을 인스턴스화라고 하고, 어떤 클래스로부터 만들어진 객체를
그 클래스의 인스턴스(Instance)라고 합니다.

>객체생성하기
객체를 생성할때는 new 연산자를 사용하면 됩니다. new연산자가 하는 역할은 객체를 생성하고
생성자를 호출하는데 사용됩니다.

---------------------------------------------------------------------------------------------------------
Timer 클래스(new를 통해서 생성)

정의
네임스페이스: System.Timers
어셈블리: System.ComponentModel.TypeConverter.dll
반복 이벤트를 생성하는 옵션으로 설정된 간격 후 이벤트를 생성합니다.

public class Timer : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
상속 Object -> MarshalByRefObject -> Component -> Timer
---------------------------------------------------------------------------------------------------------

DateTime 구조체(new를 통해서 생성할 필요가 없다)
정의
네임스페이스: System
어셈블리: mscorlib.dll, System.Runtime.dll
일반적으로 날짜와 시간으로 표시된 시간을 나타냅니다.
public struct DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IFormattable, System.Runtime.Serialization.ISerializable
상속 Object -> ValueType -> DateTime
---------------------------------------------------------------------------------------------------------

ConsoleKeyInfo 구조체(new를 통해서 생성할 필요가 없다)

정의
네임스페이스: System
어셈블리: System.Console.dll
콘솔 키로 표현된 문자와 Shift, Alt 및 Ctrl 보조키의 상태를 포함하여 누른 콘솔 키를 설명합니다.
public struct ConsoleKeyInfo : IEquatable<ConsoleKeyInfo>
상속 Object -> ValueType -> ConsoleKeyInfo

using System;

class Example
{
   public static void Main()
   {
      ConsoleKeyInfo cki; //new 사용하지 않음, 객체생성하지 않아도 사용할수 있는 경우. 이른바 구조체(?)
      // Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = true;

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
      Console.WriteLine("Press the Escape (Esc) key to quit: \n");
      do
      {
         cki = Console.ReadKey();
         Console.Write(" --- You pressed ");
         if((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+");
         if((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+");
         if((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
         Console.WriteLine(cki.Key.ToString());
       } while (cki.Key != ConsoleKey.Escape);
    }
}
// This example displays output similar to the following:
//       Press any combination of CTL, ALT, and SHIFT, and a console key.
//       Press the Escape (Esc) key to quit:
//
//       a --- You pressed A
//       k --- You pressed ALT+K
//       ► --- You pressed CTL+P
//         --- You pressed RightArrow
//       R --- You pressed SHIFT+R
//                --- You pressed CTL+I
//       j --- You pressed ALT+J
//       O --- You pressed SHIFT+O
//       § --- You pressed CTL+U

---------------------------------------------------------------------------------------------------------

 

/*3 * 3 배열로 된 테트리스 모양 회전시키기
 *스페이스바를 누르면, 90도씩 회전하는 로직*/

class Program
{
    public static void Main()
    {
        TrisCls nm = new TrisCls();
        nm.running();
    }
}
class TrisCls
{
    //desinition & variables
    const int ARR=3;
    int[,] design = new int[,]
    {
        {0,0,1},
        {1,1,1}, 
        {0,0,1}
    }
    //control
    ConsoleKeyInfo keyinfo;

    public void running()
    {
        int rc;
        while(true)
        {
            keyinfo=Console.ReadKey(true);
            if(keyinfo.Key==ConsoleKey.Escape) break;
            if(keyinfo.Key==ConsoleKey.Spacebar) 
            {
                rc=design_rotation();
                rc=design_rotation();
            }

            draw();
        }
    }
    int design_rotation()
    {
        int tmp;

        tmp = design[0,0];
        design[0,0]=design[0,1];
        design[0,1]=design[0,2];
        design[0,2]=design[1,2];
        design[1,2]=design[2,2];
        design[2,2]=design[2,1];
        design[2,1]=design[2,0];
        design[2,0]=design[1,0];
        design[1,0]=tmp;

        return(1);
    }
    void draw()
    {
        string text="";
        int ii,kk;

        for(ii=0; ii<ARR; ii++)
        {
            for(kk=0; kk<ARR; kk++)
            {
                if(design[ii,kk]==1) text=text+"U";
                else text=text+"_";
            }
            text=text+"\n";
        }
        Console.Write(text);
    }
}



        

#솔류션 + 프로젝트 다수일경우 참조방법

하나의 솔류션에 여러개의 프로젝트 단위로 나누어서 프로그램을 구성하는경우에
DLL파일 참조시에, 프로젝트 단위별로 DLL참조를 해야한다.

프로젝트(1) -> 속성(R) -> 참조경로(1)

프로젝트(1) -> 속성(R) -> 참조경로(2) ex>C:\Program Files\ComponetOne\Studio for WinForms\bin\v4\

위의 이미지에서, 참조경로에 추가를 해주면 됩니다.

C1 배포 & Deploy

컴포넌트원(ComponentOne)를 배포하는 방법에 대한 설명입니다.

배포가 될 때 사용중인 아래의 DLL이 같이 배포된 프로그램의 같은 경로에 포함되어야 합니다.

  • C1.Win.2.dll
  • C1.Win.컨트롤 이름.2.dll/C1.C1 컨트롤 이름.2.dll
  • C1.Win.4.dll
  • C1.Win. 컨트롤 이름.4.dll/C1.C1 컨트롤 이름.4.dll
  • C1.Win. 컨트롤 이름.4.Design.dll/C1.C1 컨트롤 이름.4.Design.dll

DLL에 붙어 있는 숫자 2와 4는 기본적으로 .NET 프레임 워크와 호환성을 나타내며 해당 DLL이 다양한 타입의 호환성을 가지기 때문에 현재는 문제가 되지 않더라도 장래적인 호환성을 위하여 배포하실 때는 2가지 버전의 DLL을 모두 배포하여야 합니다.

예를 들어 C1.Win.FlexGrid.2.dll와 C1.Win.FlexGrid.4.dll을 모두 배포하여야 합니다.

C1.C1Excel.4.5.2 Assembly / C1.C1Excel Namespace

 

C1.C1Excel Namespace | ComponentOne Excel for .NET

 

www.grapecity.com




Class                    Description

  C1XLBook Represents an Excel workbook containing one or more worksheets.
Contains methods for loading and saving XLS files, and exposes a collection of XLSheet objects that represent the individual worksheets.
  ShapeCollection Represents a collection of XLShape objects on an XLSheet.
  Strings Static class containing UI strings used by the designer.
  XLBorderFormatting The border formatting.
  XLCell Represents individual cells in an XLSheet and provides properties for getting and setting the cell Value, Style, and Hyperlink.
  XLCellRange Represents a range of XLCell objects in an XLSheet.
  XLCellRangeCollection Represents a collection of XLCellRange objects on an XLSheet.
  XLColumn Represents a column in a worksheet. This class provides properties for setting the column's width, style, and visibility.

+ Recent posts