Mono platform!

Mono platform!
2004-10-28T14:37:38+02:00
2004-10-28T15:21:16+02:00
2022-11-01T09:55:34+01:00
  • Ez annyira nem nagy ujdonsag /legalabbis szerintem/. Hiszen az 1.0 mar junius ota elerheto es most meg mar az 1.0.2-nel jarnak /az 1.1 decemberre varhato, ha jol emlekszem/. Mar voltak is elszorva errol temak itt a Prog.hu-n.
    Fejlesztoeszkoznek meg lehet hasznalni hozza a SharpDevelop-ot Windows alatt.

    "kép mentése jpeg-ben 1 utasítás (nemúgy ahogy java-ban..)"

    javax.imageio.ImageIO.write ()?
    Inkabb az XML feldolgozas az ami szep es rovid, bar ez nem kizarolag a Mono, hanem a .NET sajatja.

    Persze azert kell a Mono-nak a reklam.
    Mutasd a teljes hozzászólást!
  • Naná hogy ismét elfelejtettem valamit:

    Weblapja, ahonnan le tudjátok tölteni:
    www.mono-project.com

    A GUI programozásával kapcs:
    Redirecting…

    Google segítségével tudtam példákat is letöltenem...
    Mutasd a teljes hozzászólást!
  • Még valami. bocs az összevissza kommentezett forráshoz, de ki kellett próbálnom hogyan fut a leggyorsabban!
    Mutasd a teljes hozzászólást!
  • Fel szeretném hívni a programozó társak figyelmét (amely a hirekben is szerepelt) .NET ingyenes (GPL-es), több platfomon (linux Windows Solaris, Mac OS) futó implementációja elkészült és úgy hívják hogy MONO.

    Közelebbről megismerkedtem vele, és fiatalsága ellenére lenyűgözött.

    A legtöbb funkciót átültették az eredeti MS féle .NET-ből, ez azért tetszik, mert a .NET-ben (Mono készítője szerint) java és a C nyelv jó dolgait pakolták össze.

    Például email küldés 5 sor! Telnet szerver (alap) 20 sor, kép mentése jpeg-ben 1 utasítás (nemúgy ahogy java-ban..). Végre nincsenek felesleges sorok!! Csak a lényeg.

    A MONO-ban grafikus felületnek (egyenlőre) a GTK sharp féle verzióját mellékelték. (Szintén fut Win alatt!) De ígérik a Windows formjainak átültetését.

    Hátránya a fiatalsága, még sok minden hiányzik: fejlesztő környezet csak Linuxon működik. (Amelyben grafikus tervező programot is használhatunk: glade-2 -őt, nemsokára adatbázist használó progikat is készíthetünk.)

    Készítettem benne egy egyszerű 3d-s progit: 5000 képpontot mozgatok a képernyőn, formája szökőkút szerű, a vízcseppek felemelkednek majd lehullanak.

    A forrása íme:
    Fájlnév: "Main.cs"

    // project created on 23/10/2004 at 08:41
    using System;
    using Gtk;
    using Gdk;

    class MainClass {

    public static void Main(string[] args)
    {
    Application.Init ();
    MyWindow w = new MyWindow();
    Application.Run ();
    }
    }
    ---fájl vége---


    Fájlnév:"MyWindow.cs"

    using System;
    using Gtk;
    using Gdk;

    public class MyWindow: Gtk.Window {
    private Gtk.Button StartButton;
    private Gtk.DrawingArea drawingarea;
    private Gdk.Pixmap pixmap;
    private Gdk.Window window;
    Gdk.Image image;

    public MyWindow () : base ("MyWindow")
    {
    this.SetDefaultSize (800, 600);
    this.DeleteEvent += new DeleteEventHandler (OnMyWindowDelete);

    drawingarea = new DrawingArea();
    drawingarea.SetSizeRequest(640, 480);
    drawingarea.ExposeEvent += Expose_Event;
    drawingarea.ConfigureEvent += Config_Event;

    Fixed fixed1 = new Fixed();
    fixed1.Add(drawingarea);

    StartButton = new Gtk.Button("Start");
    StartButton.Clicked += StartButtonClicked;
    fixed1.Put(StartButton,710,30);

    this.Add(fixed1);
    this.ShowAll ();
    }

    void StartButtonClicked(object obj, EventArgs args)
    {
    int x2d,y2d,szin,j,debug=0;
    float z3d;
    int[] tomb = new int[3];
    float[] tomb_z = new float[1];
    Pont[] Pont_obj = new Pont[5000];
    //Gdk.Point[] point_tomb = new Gdk.Point [5000];
    byte[] RGB_tomb= new byte [3*640*480];

    image = pixmap.GetImage(0, 0, 640, 480);

    for(int i=0;i<5000;i++)
    {
    Pont_obj = new Pont();
    Pont_obj
    .Init(0,-200,200,30,10);
    }

    while(debug <= 1000)
    {
    for(int i=0;i<5000;i++)
    {
    Pont_obj.Run();
    Pont_obj
    .Get(tomb,tomb_z);
    x2d = tomb[0];
    y2d = tomb[1];
    szin = tomb[2];
    z3d = tomb_z[0];
    x2d=320+x2d;y2d=240-y2d;
    RGB_tomb[(y2d*640+x2d)*3] = 0xff;
    RGB_tomb[(y2d*640+x2d)*3+1] = 0xff;
    RGB_tomb[(y2d*640+x2d)*3+2] = 0xff;
    //point_tomb.X = x2d;
    //point_tomb
    .Y = y2d;

    //pixmap.DrawPoint(drawingarea.Style.WhiteGC, x2d, y2d);

    }

    //pixmap.DrawPoints(drawingarea.Style.WhiteGC, point_tomb, 5000);
    debug++;
    //image = pixmap.GetImage(0, 0, 640, 480);
    //window.DrawImage(drawingarea.Style.BlackGC, image, 0, 0, 0, 0, 640, 480);
    window.DrawRgbImage(drawingarea.Style.BlackGC, 0, 0, 640, 480, Gdk.RgbDither.Normal, RGB_tomb, 640*3);
    //window.DrawDrawable(drawingarea.Style.BlackGC, pixmap, 0, 0, 0, 0, 640, 480);
    //RGB_tomb = new byte [3*640*480];
    for(long q=0; q<3*640*480; q++)RGB_tomb[q] = 0;
    //pixmap.DrawRectangle (drawingarea.Style.BlackGC, true, 0, 0, 640, 480);
    }
    Application.Quit();

    }

    void Config_Event(object obj, ConfigureEventArgs args)
    {
    Gdk.EventConfigure ev = args.Event;
    window = ev.Window;
    Gdk.Rectangle allocation = drawingarea.Allocation;
    Console.WriteLine("Config");
    pixmap = new Gdk.Pixmap (window, 640,
    480, -1);
    pixmap.DrawRectangle (drawingarea.Style.BlackGC, true, 0, 0,
    640, 480);
    }

    void Expose_Event(object obj, ExposeEventArgs args)
    {
    Gdk.Rectangle area = args.Event.Area;
    args.Event.Window.DrawDrawable (drawingarea.Style.WhiteGC, pixmap,
    area.X, area.Y,
    area.X, area.Y,
    700, 800);
    }


    void OnMyWindowDelete (object o, DeleteEventArgs args)
    {
    Application.Quit ();
    }

    class Konvert
    {
    private
    float k_pont;

    public Konvert()
    {
    k_pont = 400;
    }

    public void k_pont_init(float x)
    {
    k_pont = x;
    }

    //k_pont_process(float x3d,float y3d,float z3d,float x2d, float y2d)
    public void Pont_Process(float[] tomb)
    {
    if (tomb[2]>0)
    {
    if ((tomb[0]==0)&&(tomb[1]==0))
    {
    tomb[3]=0;tomb[4]=0;
    }
    else
    {
    if (tomb[0]==0) // px==0
    {
    tomb[3]=0;
    tomb[4]=(tomb[1]/(tomb[2]+k_pont))*k_pont;
    }
    else
    {
    tomb[3]=(tomb[0]/(tomb[2]+k_pont))*k_pont;
    if (tomb[1]==0)tomb[4]=0; // py==0
    else
    {
    tomb[4]=(tomb[1]/(tomb[2]+k_pont))*k_pont;
    }
    }
    }
    }
    }
    }

    class Pont
    {
    private
    int szin,maxA,maxv0,x0,y0,z0,v,A;
    int Szin;
    float B,Z3d,t,X2d,Y2d;
    static float[] COS = new float[3600];
    static float[] SIN = new float[3600];
    static System.Random rand = new System.Random();

    Konvert Konvert_obj;// = new Konvert(); itt kiakad

    public Pont()
    {
    Konvert_obj = new Konvert();

    Init1();
    }

    static void Init1()
    {
    int i;
    float f;

    for(i=0,f=0;i<3600;i++,f+=0.1F)
    {
    SIN=(float)Math.Sin(Math.PI/180*f);
    COS
    =(float)Math.Cos(Math.PI/180*f);
    }
    }

    public void Init(int x,int y,int z, int A2, int V0)
    {
    x0=x;y0=y;maxA=A2;maxv0=V0+50;
    B=0;z0=z;//Szin=Color.red;
    Reset();
    //t=random(1290);
    // t = (float)Math.random()*1290;
    t = (float)rand.NextDouble()*1290;
    t/=100;
    v=70; //70
    Konvert_obj.k_pont_init((float)400);
    }

    public void Run()
    {
    float X3d,Y3d;
    int b;
    float[] tomb = new float[5];

    X2d=t*v*COS[A];
    Y2d=t*v*SIN[A]-5*t*t;
    //X2d=t*v*(float)Math.cos(Math.PI/180*(A/10));
    //Y2d=t*v*(float)Math.sin(Math.PI/180*(A/10))-5*t*t;

    B+=500*(1/(20+Math.Abs(X2d))); // Forgatas merteke!
    if (B>=3599)B=0;
    b=(int)B;
    Z3d=SIN*X2d+z0;
    //Z3d=(float)Math.sin(Math.PI/180*(B/10))*X2d+z0;

    X3d=COS
    *X2d+x0;
    //X3d=(float)Math.cos(Math.PI/180*(B/10))*X2d+x0;

    Y3d=Y2d+y0;
    tomb[0] = (int)X3d;
    tomb[1] = Y3d;
    tomb[2] = Z3d;
    tomb[3] = X2d;
    tomb[4] = Y2d;

    Konvert_obj.Pont_Process(tomb);
    X2d = tomb[3];Y2d = tomb[4];

    if (t>=13)Reset(); //v->70 t-13
    t+=0.01F;
    }

    //void Pont::Get(int *X,int *Y,float *Z,int *szin)
    public void Get(int[] tomb,float[] z)
    {
    //*X=X2d;*Y=Y2d;*Z=Z3d;*szin=Szin;
    tomb[0] = (int)X2d;
    tomb[1] = (int)Y2d;
    tomb[2] = szin;
    z[0] = Z3d;
    }
    private void Reset()
    {
    A=800; // szog
    B = (float)rand.NextDouble()*3600;
    t=0;

    }
    }
    }

    --Fájl vége--
    Fordítása:

    mcs -pkg:gtk-sharp Main.cs MyWindow.cs


    Végre készült egy inygenes, szabad forrású, platform független progit előállító és futtató fejlesztő környezet!

    Remélem felcsigáztam az érdeklődéseteket!

    Várom hozzászólásokat! (Bár úgy néz ki, csak jöv héten jutok nethez..)

    Üdv!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd