Kendi Ide Nizi Tasarladığınızı Hayal Edin...

'Asp.NET - C# - VB.net' forumunda Semtex tarafından 12 Nisan 2018 tarihinde açılan konu

  1. Semtex ER

    Katılım:
    6 Kasım 2016
    Mesaj:
    730
    Alınan Beğeniler:
    1,102

    Özel Mesaj
    Zor işleri tasarlamayı seviyorum...

    Şimdi kendi Kod editörümüzü inşa edeceğiz...

    Programlama dilleri öğrenmek için herkes vakit ayırıyor...

    Biz ne yapalım...

    Programlama dilleri için kendi Tümleşik Geliştirme Ortamımızı tasarlayalım...

    Hepsi bir arada olsun...

    Hem programlama yeteneğimiz gelişir hem de programlama editörleri nasıl çalışır öğrenmiş oluruz...

    Önce yine hazır kodlarla başlayalım...

    https://www.codeproject.com/Articles/161871/Fast-Colored-TextBox-for-syntax-highlighting

    Öncelikle bir tümleşik geliştirme ortamı (IDE) tasarlayacaksak bir editörü olması gerekir...

    Ve bu editör de alelade bir editör olmamalı, dili tanımalı, kodu renklendirebilmeli vs vs...

    Peki derleyici ve linker nasıl olacak?

    Hazır derleyici ve linker alacağız...

    Sonra derleyicimiz ona gerekli kodları gönderecek...

    Tıpkı ide lerin yaptığı gibi...

    O zaman bize bir derleyici de lazım...

    http://mingw-w64.org/doku.php

    Onu da buradan alacağız...

    Bu arada hem gcc ile nasıl komut satırından derleme yapılır onu da görme fırsatımız olacaktır...

    Yapar mıyız?

    Yaparız her halde...

    Yeterli katılım olursa...

    İlgi ve bolca soru olursa yaparız...

    Neler lazım?

    Visual Studio 2017 Community edition... (ücretsiz)

    Yukarıda verdiğim CodeProject deki proje...

    http://mingw-w64.org/doku.php

    linkindeki, derleyici...

    Ben 64 bit tercih ediyorum...

    Siz isterseniz, 32 bitliğini...

    http://www.mingw.org/

    Adresinden temin edebilirsiniz...

    Ben de bu arada verdiğim kaynak kodu ayıklayayım...

    Başlayalım bir kaç haftada bitiririz sanırım...
     
  2. Semtex ER

    Katılım:
    6 Kasım 2016
    Mesaj:
    730
    Alınan Beğeniler:
    1,102

    Özel Mesaj
    Kodu bırkaladım, biraz ayıkladım, temel bir hale getirdim...

    Burada önce sadeleştirip, nasıl çalıştığını anlayacağız, sonra da tekrardan IDE haline getireceğiz...

    İlk aşama, editör kısmına şekil vermek...

    Bunun için de fast colored text box ın dll versiyonuna dokunmadım...

    Ana formumuz bu dll yi çağırarak çalışıyor...

    Açıkçası adam güzel yazmış...

    Bozmak istemedim...

    3000 satır + binlerce satır da ilavesi var...

    Biz bir kaç yüz satırlık editör kısmına odaklanacağız şimdilik...

    Merak eden...

    FastColoredTextBox projesini komple inceleyebilir...


    http://dosya.co/qssiieb7scx1/IDE_Çalışması.zip.html

    Burada ilk halini proje olarak paylaşıyorum...

    Tüm menüleri Türkçeleştirmedim...

    Alt menüler şimdilik duruyor...

    Dosya açabiliyor...

    Farklı kaydetle RTF ve HTML kaydedebiliyor...

    Çıkış yapabiliyor...

    [​IMG]

    Bu da açtığım bir cs dosyasını görüntülerken...

    Bu haliyle gayet iyi bir metin editörü haline geldi...

    Ama yapılacak daha bir çok işi var...

    Adım adım tamamlayacağız...
     
  3. dragov ER

    Katılım:
    10 Ocak 2017
    Mesaj:
    450
    Alınan Beğeniler:
    761

    Özel Mesaj
    Piyasada parayla bile eğitimi alınmayacak konular bunlar. Kıymetini bilin derim. Özellikle yazılımda nasıl gelişirim diyenlere duyrulur. Ben de vakit buldukça konuya katılım sağlamaya çalışacağım.
    note tertip seni uzun zamandır göremiyorum forumda. Ama fırsatını bulduğunda bu konuya sen de bakmalısın
     
    SmallHack, note, Vecihi_33 ve 3 kişi daha bunu beğendi.
    Katılım:
    30 Eylül 2016
    Mesaj:
    1,257
    Alınan Beğeniler:
    1,123

    Özel Mesaj
    Konuyu takibe alıyorum :). Keşke yardım edebilecek seviyede olsam diyorum bazen. Ama daha çok ekmek yemem lazım.
     
    note ve Zatoichi bunu beğendi.
  4. Semtex ER

    Katılım:
    6 Kasım 2016
    Mesaj:
    730
    Alınan Beğeniler:
    1,102

    Özel Mesaj
    Ben yine de özet geçeyim kodun bir kaç kısmına...

    Asıl işi yapan fastcoloredtexbox adındaki proje biz ona şimdilik dokunmuyoruz...

    Bize bir dll dosyası oluşturuyor...

    Ve biz ona çağrı yaparak kullanıyoruz...

    Daha önce belirttiğim üzere 3000 satır + bir kaç bin satır daha...

    PowerfulSample.Designer.cs

    Dosyası içerisinde

    private FastColoredTextBox fctb;

    Satırı ile sınıfı fctb adında bir nesneye atıyoruz...

    Asıl işi fcbt nesnesi üzerinde yapıyoruz...

    PowerfulSample.cs dosyasında ise...

    using FastColoredTextBoxNS;

    Satırı ile dahil ettik sınıfı...

    Bu kısmın tamamını buraya ekleyebiliriz...

    PHP:
    using System;
    using System.Drawing.Drawing2D;
    using System.Threading;
    using System.Windows.Forms;
    using System.Drawing;
    using FastColoredTextBoxNS;
    using System.Diagnostics;
    using System.Text.RegularExpressions;
    using System.IO;
    using System.Linq;
    using System.Collections.Generic;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Text;

    namespace Tester
    {
        public partial class PowerfulSample : Form
        {
            string lang = "CSharp (custom highlighter)";

            //styles
            TextStyle BlueStyle = new TextStyle(Brushes.Blue, null, FontStyle.Regular);
            TextStyle BoldStyle = new TextStyle(null, null, FontStyle.Bold | FontStyle.Underline);
            TextStyle GrayStyle = new TextStyle(Brushes.Gray, null, FontStyle.Regular);
            TextStyle MagentaStyle = new TextStyle(Brushes.Magenta, null, FontStyle.Regular);
            TextStyle GreenStyle = new TextStyle(Brushes.Green, null, FontStyle.Italic);
            TextStyle BrownStyle = new TextStyle(Brushes.Brown, null, FontStyle.Italic);
            TextStyle MaroonStyle = new TextStyle(Brushes.Maroon, null, FontStyle.Regular);
            MarkerStyle SameWordsStyle = new MarkerStyle(new SolidBrush(Color.FromArgb(40, Color.Gray)));

            public PowerfulSample()
            {
                InitializeComponent();
            }

            private void InitStylesPriority()
            {           
                
                //add this style explicitly for drawing under other styles
                fctb.AddStyle(SameWordsStyle);
            }
            
            private void fctb_TextChanged(object sender, TextChangedEventArgs e)
            {
                switch (lang)
                {
                    case "CSharp (custom highlighter)":
                        //For sample, we will highlight the syntax of C# manually, although could use built-in highlighter
                        CSharpSyntaxHighlight(e);//custom highlighting
                        break;
                    default:
                        break;//for highlighting of other languages, we using built-in FastColoredTextBox highlighter
                }

                if (fctb.Text.Trim().StartsWith("<?xml"))
                {
                    fctb.Language = Language.XML;

                    fctb.ClearStylesBuffer();
                    fctb.Range.ClearStyle(StyleIndex.All);
                    InitStylesPriority();
                    fctb.AutoIndentNeeded -= fctb_AutoIndentNeeded;

                    fctb.OnSyntaxHighlight(new TextChangedEventArgs(fctb.Range));
                }
            }   

            private void CSharpSyntaxHighlight(TextChangedEventArgs e)
            {
                fctb.LeftBracket = '(';
                fctb.RightBracket = ')';
                fctb.LeftBracket2 = '\x0';
                fctb.RightBracket2 = '\x0';
                //clear style of changed range
                e.ChangedRange.ClearStyle(BlueStyle, BoldStyle, GrayStyle, MagentaStyle, GreenStyle, BrownStyle);

                //string highlighting
                e.ChangedRange.SetStyle(BrownStyle, @"""""|@""""|''|@"".*?""|(?<!@)(?<range>"".*?[^\\]"")|'.*?[^\\]'");
                //comment highlighting
                e.ChangedRange.SetStyle(GreenStyle, @"//.*$", RegexOptions.Multiline);
                e.ChangedRange.SetStyle(GreenStyle, @"(/\*.*?\*/)|(/\*.*)", RegexOptions.Singleline);
                e.ChangedRange.SetStyle(GreenStyle, @"(/\*.*?\*/)|(.*\*/)", RegexOptions.Singleline|RegexOptions.RightToLeft);
                //number highlighting
                e.ChangedRange.SetStyle(MagentaStyle, @"\b\d+[\.]?\d*([eE]\-?\d+)?[lLdDfF]?\b|\b0x[a-fA-F\d]+\b");
                //attribute highlighting
                e.ChangedRange.SetStyle(GrayStyle, @"^\s*(?<range>\[.+?\])\s*$", RegexOptions.Multiline);
                //class name highlighting
                e.ChangedRange.SetStyle(BoldStyle, @"\b(class|struct|enum|interface)\s+(?<range>\w+?)\b");
                //keyword highlighting
                e.ChangedRange.SetStyle(BlueStyle, @"\b(abstract|as|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b|#region\b|#endregion\b");

                //clear folding markers
                e.ChangedRange.ClearFoldingMarkers();

                //set folding markers
                e.ChangedRange.SetFoldingMarkers("{", "}");//allow to collapse brackets block
                e.ChangedRange.SetFoldingMarkers(@"#region\b", @"#endregion\b");//allow to collapse #region blocks
                e.ChangedRange.SetFoldingMarkers(@"/\*", @"\*/");//allow to collapse comment block
            }

            private void findToolStripMenuItem_Click(object sender, EventArgs e)
            {
                fctb.ShowFindDialog();
            }

            private void replaceToolStripMenuItem_Click(object sender, EventArgs e)
            {
                fctb.ShowReplaceDialog();
            }

            private void miLanguage_DropDownOpening(object sender, EventArgs e)
            {
                foreach (ToolStripMenuItem mi in miLanguage.DropDownItems)
                    mi.Checked = mi.Text == lang;
            }

            private void miCSharp_Click(object sender, EventArgs e)
            {
                //set language
                lang = (sender as ToolStripMenuItem).Text;
                fctb.ClearStylesBuffer();
                fctb.Range.ClearStyle(StyleIndex.All);
                InitStylesPriority();
                fctb.AutoIndentNeeded -= fctb_AutoIndentNeeded;
                //
                switch (lang)
                {
                    //For example, we will highlight the syntax of C# manually, although could use built-in highlighter
                    case "CSharp (custom highlighter)":
                        fctb.Language = Language.Custom;
                        fctb.CommentPrefix = "//";
                        fctb.AutoIndentNeeded += fctb_AutoIndentNeeded;
                        //call OnTextChanged for refresh syntax highlighting
                        fctb.OnTextChanged();
                        break;
                    case "CSharp (built-in highlighter)": fctb.Language = Language.CSharp; break;
                    case "VB": fctb.Language = Language.VB; break;
                    case "HTML": fctb.Language = Language.HTML; break;
                    case "XML": fctb.Language = Language.XML; break;
                    case "SQL": fctb.Language = Language.SQL; break;
                    case "PHP": fctb.Language = Language.PHP; break;
                    case "JS": fctb.Language = Language.JS; break;
                    case "Lua": fctb.Language = Language.Lua; break;
                }
                fctb.OnSyntaxHighlight(new TextChangedEventArgs(fctb.Range));
                //miChangeColors.Enabled = lang != "CSharp (custom highlighter)";
            }

            private void collapseSelectedBlockToolStripMenuItem_Click(object sender, EventArgs e)
            {
                fctb.CollapseBlock(fctb.Selection.Start.iLine, fctb.Selection.End.iLine);
            }

            private void collapseAllregionToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //this example shows how to collapse all #region blocks (C#)
                if (!lang.StartsWith("CSharp")) return;
                for (int iLine = 0; iLine < fctb.LinesCount; iLine++)
                {
                    if (fctb[iLine].FoldingStartMarker == @"#region\b")//marker @"#region\b" was used in SetFoldingMarkers()
                        fctb.CollapseFoldingBlock(iLine);
                }
            }

            private void exapndAllregionToolStripMenuItem_Click(object sender, EventArgs e)
            {
                //this example shows how to expand all #region blocks (C#)
                if (!lang.StartsWith("CSharp")) return;
                for (int iLine = 0; iLine < fctb.LinesCount; iLine++)
                {
                    if (fctb[iLine].FoldingStartMarker == @"#region\b")//marker @"#region\b" was used in SetFoldingMarkers()
                        fctb.ExpandFoldedBlock(iLine);
                }
            }

            private void increaseIndentSiftTabToolStripMenuItem_Click(object sender, EventArgs e)
            {
                fctb.IncreaseIndent();
            }

            private void decreaseIndentTabToolStripMenuItem_Click(object sender, EventArgs e)
            {
                fctb.DecreaseIndent();
            }

            private void hTMLToolStripMenuItem1_Click(object sender, EventArgs e)
            {
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "HTML with <PRE> tag|*.html|HTML without <PRE> tag|*.html";
                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    string html = "";

                    if (sfd.FilterIndex == 1)
                    {
                        html = fctb.Html;
                    }
                    if (sfd.FilterIndex == 2)
                    {
                        
                        ExportToHTML exporter = new ExportToHTML();
                        exporter.UseBr = true;
                        exporter.UseNbsp = false;
                        exporter.UseForwardNbsp = true;
                        exporter.UseStyleTag = true;
                        html = exporter.GetHtml(fctb);
                    }
                    File.WriteAllText(sfd.FileName, html);
                }
            }

            private void fctb_SelectionChangedDelayed(object sender, EventArgs e)
            {
                fctb.VisibleRange.ClearStyle(SameWordsStyle);
                if (!fctb.Selection.IsEmpty)
                    return;//user selected diapason

                //get fragment around caret
                var fragment = fctb.Selection.GetFragment(@"\w");
                string text = fragment.Text;
                if (text.Length == 0)
                    return;
                //highlight same words
                var ranges = fctb.VisibleRange.GetRanges("\\b" + text + "\\b").ToArray();
                if(ranges.Length>1)
                foreach(var r in ranges)
                    r.SetStyle(SameWordsStyle);
            }

            private void goForwardCtrlShiftToolStripMenuItem_Click(object sender, EventArgs e)
            {
                fctb.NavigateForward();
            }

            private void goBackwardCtrlToolStripMenuItem_Click(object sender, EventArgs e)
            {
                fctb.NavigateBackward();
            }

            private void autoIndentToolStripMenuItem_Click(object sender, EventArgs e)
            {
                fctb.DoAutoIndent();
            }

            const int maxBracketSearchIterations = 2000;

            void GoLeftBracket(FastColoredTextBox tb, char leftBracket, char rightBracket)
            {
                Range range = tb.Selection.Clone();//need to clone because we will move caret
                int counter = 0;
                int maxIterations = maxBracketSearchIterations;
                while (range.GoLeftThroughFolded())//move caret left
                {
                    if (range.CharAfterStart == leftBracket) counter++;
                    if (range.CharAfterStart == rightBracket) counter--;
                    if (counter == 1)
                    {
                        //found
                        tb.Selection.Start = range.Start;
                        tb.DoSelectionVisible();
                        break;
                    }
                    //
                    maxIterations--;
                    if (maxIterations <= 0) break;
                }
                tb.Invalidate();
            }

            void GoRightBracket(FastColoredTextBox tb, char leftBracket, char rightBracket)
            {
                var range = tb.Selection.Clone();//need clone because we will move caret
                int counter = 0;
                int maxIterations = maxBracketSearchIterations;
                do
                {
                    if (range.CharAfterStart == leftBracket) counter++;
                    if (range.CharAfterStart == rightBracket) counter--;
                    if (counter == -1)
                    {
                        //found
                        tb.Selection.Start = range.Start;
                        tb.Selection.GoRightThroughFolded();
                        tb.DoSelectionVisible();
                        break;
                    }
                    //
                    maxIterations--;
                    if (maxIterations <= 0) break;
                } while (range.GoRightThroughFolded());//move caret right

                tb.Invalidate();
            }

            private void goLeftBracketToolStripMenuItem_Click(object sender, EventArgs e)
            {
                GoLeftBracket(fctb, '{', '}');
            }

            private void goRightBracketToolStripMenuItem_Click(object sender, EventArgs e)
            {
                GoRightBracket(fctb, '{', '}');
            }

            private void fctb_AutoIndentNeeded(object sender, AutoIndentEventArgs args)
            {
                //block {}
                if (Regex.IsMatch(args.LineText, @"^[^""']*\{.*\}[^""']*$"))
                    return;
                //start of block {}
                if (Regex.IsMatch(args.LineText, @"^[^""']*\{"))
                {
                    args.ShiftNextLines = args.TabLength;
                    return;
                }
                //end of block {}
                if (Regex.IsMatch(args.LineText, @"}[^""']*$"))
                {
                    args.Shift = -args.TabLength;
                    args.ShiftNextLines = -args.TabLength;
                    return;
                }
                //label
                if (Regex.IsMatch(args.LineText, @"^\s*\w+\s*:\s*($|//)") &&
                    !Regex.IsMatch(args.LineText, @"^\s*default\s*:"))
                {
                    args.Shift = -args.TabLength;
                    return;
                }
                //some statements: case, default
                if (Regex.IsMatch(args.LineText, @"^\s*(case|default)\b.*:\s*($|//)"))
                {
                    args.Shift = -args.TabLength / 2;
                    return;
                }
                //is unclosed operator in previous line ?
                if (Regex.IsMatch(args.PrevLineText, @"^\s*(if|for|foreach|while|[\}\s]*else)\b[^{]*$"))
                    if (!Regex.IsMatch(args.PrevLineText, @"(;\s*$)|(;\s*//)"))//operator is unclosed
                    {
                        args.Shift = args.TabLength;
                        return;
                    }
            }

            private void miPrint_Click(object sender, EventArgs e)
            {
                fctb.Print(new PrintDialogSettings() { ShowPrintPreviewDialog = true });
            }

            Random rnd = new Random();

            private void miChangeColors_Click(object sender, EventArgs e)
            {

            }

            private void setSelectedAsReadonlyToolStripMenuItem_Click(object sender, EventArgs e)
            {
                fctb.Selection.ReadOnly = true;
            }

            private void setSelectedAsWritableToolStripMenuItem_Click(object sender, EventArgs e)
            {
                fctb.Selection.ReadOnly = false;
            }

            private void startStopMacroRecordingToolStripMenuItem_Click(object sender, EventArgs e)
            {
                fctb.MacrosManager.IsRecording = !fctb.MacrosManager.IsRecording;
            }

            private void executeMacroToolStripMenuItem_Click(object sender, EventArgs e)
            {
                fctb.MacrosManager.ExecuteMacros();
            }

            private void changeHotkeysToolStripMenuItem_Click(object sender, EventArgs e)
            {

            }

            private void rTFToolStripMenuItem_Click(object sender, EventArgs e)
            {
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "RTF|*.rtf";
                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    string rtf = fctb.Rtf;
                    File.WriteAllText(sfd.FileName, rtf);
                }
            }

            private void fctb_CustomAction(object sender, CustomActionEventArgs e)
            {
                MessageBox.Show(e.Action.ToString());
            }

            private void commentSelectedLinesToolStripMenuItem_Click(object sender, EventArgs e)
            {
                fctb.InsertLinePrefix(fctb.CommentPrefix);
            }

            private void uncommentSelectedLinesToolStripMenuItem_Click(object sender, EventArgs e)
            {
                fctb.RemoveLinePrefix(fctb.CommentPrefix);
            }

            private void çıkışToolStripMenuItem_Click_1(object sender, EventArgs e)
            {
                Close();
            }

            private void hTMLToolStripMenuItem2_Click(object sender, EventArgs e)
            {
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "HTML with <PRE> tag|*.html|HTML without <PRE> tag|*.html";
                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    string html = "";

                    if (sfd.FilterIndex == 1)
                    {
                        html = fctb.Html;
                    }
                    if (sfd.FilterIndex == 2)
                    {

                        ExportToHTML exporter = new ExportToHTML();
                        exporter.UseBr = true;
                        exporter.UseNbsp = false;
                        exporter.UseForwardNbsp = true;
                        exporter.UseStyleTag = true;
                        html = exporter.GetHtml(fctb);
                    }
                    File.WriteAllText(sfd.FileName, html);
                }
            }

            private void rTFToolStripMenuItem1_Click(object sender, EventArgs e)
            {
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "RTF|*.rtf";
                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    string rtf = fctb.Rtf;
                    File.WriteAllText(sfd.FileName, rtf);
                }
            }

            private void açToolStripMenuItem_Click(object sender, EventArgs e)
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Filter = "CS File| *.cs";
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    fctb.Text = File.ReadAllText(ofd.FileName);
                }
            }
        }
    }

    IDE için editörümüz hazır gibi...

    Bir iki özellik daha var editöre eklemek istediğim...

    Editör bitince...

    Derleyici ile komut satırından haberleştireceğiz...

    Daha önce verdiğim linklerden mingGw elimizin altında olsun...

    Dosyaları bir proje dosyasına bağlayıp...

    Bunu da mingw üzerinde derleyip bağlayacağız...

    Ama bir debugger ekler miyiz bilmiyorum...

    Eger kendi derleyici ve debugger ımızı tasarlarsak belki bir gün... Bu projede olmaz ama...

    O derleyici ve debugger la da da genişleyebilecek şekilde tasarlarız...

    Kafanız karışmasın...

    IDE yi CS ile tasarlıyoruz ama derleyicimiz ve seçtiğimiz dil... C veya C++ olacak...
     
    note, dragov, Alparslan5545 ve 1 kişi daha bunu beğendi.
    Katılım:
    18 Ağustos 2017
    Mesaj:
    513
    Alınan Beğeniler:
    793

    Özel Mesaj
    Konuyu takip ediyorum.Kod öğrenmeye cok hevesliyim.Konuda paylaştığın programları incelicem.Takıldıgım yer olursa kapını çalarım :)
     
  5. Semtex ER

    Katılım:
    6 Kasım 2016
    Mesaj:
    730
    Alınan Beğeniler:
    1,102

    Özel Mesaj

    Her zaman...

    Sorularınız ne kadar saçma da gelse sormaktan çekinmeyin...

    Sormadan, denemeden öğrenilmez...

    Sadece okuyarak asla öğrenilmez...

    Siz sorun, elden geldiğince cevaplamaya çalışalım...
     
    note ve Alparslan5545 bunu beğendi.
    Katılım:
    18 Ağustos 2017
    Mesaj:
    513
    Alınan Beğeniler:
    793

    Özel Mesaj
    Teşekkür ederim.Kodlarla oyun yapılabiliyo dimi
     
    Katılım:
    3 Ekim 2016
    Mesaj:
    575
    Alınan Beğeniler:
    317

    Özel Mesaj
    Seçeceğiniz dil konusunda C++ der çekilirim. Gayet üstün bir dil ve bir çok hatasının çözümü de günümüzde bulunmakta. Biraz daha fazla uğraştıracak, lakin daha az baş ağrıtacak bir dil diyebilirim. Bu projede başarılar dilerim.. Kolay gelsin..
     
  6. Semtex ER

    Katılım:
    6 Kasım 2016
    Mesaj:
    730
    Alınan Beğeniler:
    1,102

    Özel Mesaj
    Evet, yapılabilir...

    Oyun yapmak için sadece programlama bilmek yetmez...

    Aynı zamanda grafik tasarım, 3D design, gibi konularda da iyi olmak gerekir...

    Anlamanız için mesela kodu bir kenara bırakın...

    3 boyutlu bir araç çizin ve paylaşın...

    Oyunu kodlamak çok ayrı bir konu...

    O konuda da bir konu açarım...

    Grafik motoru, oyun motoru, script, grafik tasarım, çarpışma fiziği, akışkanlar dinamiği..

    Fizik motoru...

    Gibi bir çok ayrı disiplin ve alt disiplini içerir...

    Dediğim gibi oyun konusunda...

    OpenGL ve DirectX konusunda örnekler veririm...

    Şu aralar hazır verilen bir kaç VisualStudio eklentisi de var...

    Unreal Engine, Unity gibi...

    Ama şimdilik konu editör ve derleyicisi...

    Proje bu...

    Konularımı bir arada tutar...

    Projeyi kapatır sonra başka konuya geçerim genelde...

    Aksi halde dağılır ve örneklerimin sonu gelmez...

    Başlayıp bitmeyen şeyleri sevmiyorum...

    Ama söz, bir terslik olmazsa OpenGL ve DirectX temel bilgileri de olan bir başlık açacağım...
     
    note, Vecihi_33, DuhaYunus ve 1 kişi daha bunu beğendi.
  7. Semtex ER

    Katılım:
    6 Kasım 2016
    Mesaj:
    730
    Alınan Beğeniler:
    1,102

    Özel Mesaj

    Yazılarıma bakma fırsatı bulursanız...

    Benim için dil fark etmez...

    Yemek yerken, tatlı, salata, ara sıcaklar ve asıl yemek diye ayırmam...

    Ne lazımsa almak gerekir...

    Bu nedenle, bütün diller iyidir ve gerektiği yerde kullanılır...
     
    note ve Vecihi_33 bunu beğendi.
    Katılım:
    18 Ağustos 2017
    Mesaj:
    513
    Alınan Beğeniler:
    793

    Özel Mesaj
    Kusura bakma konuyu dağıttım galiba.Takipteyim sizi takıldığım yer olursa yine sorarım.Şimdiden teşekkü ederim
     
    Vecihi_33 ve Kaank52 bunu beğendi.
  8. Semtex ER

    Katılım:
    6 Kasım 2016
    Mesaj:
    730
    Alınan Beğeniler:
    1,102

    Özel Mesaj
    Yok hayır dağıtmadınız...

    Sorunuz mantıklı...

    Yalnız bu başlıkta örnekleyemeyeceğim...

    Başlıkla örnekleri tutarlı muhafaza etmeye çalışıyorum...

    Dediğim gibi, ayrı bir başlıkta mutlaka inceleriz...
     
    note, Vecihi_33, Kaank52 ve 3 kişi daha bunu beğendi.
  9. Gabain ER

    Katılım:
    27 Nisan 2017
    Mesaj:
    1,166
    Alınan Beğeniler:
    1,992

    Özel Mesaj
    Emek ve gayretinize sağlık. Proje tamamlanmasa dahi niyetine girdiğiniz projeler oldukça başarılı, akıcı ve açıklayıcı şekilde üyelere aktarılmakta (tabiki şahsi fikrim). İlgi alanım değil; olmasını, özellikle de zaman ayırabilmeyi isterdim eğer öyle olsaydı sizden çok şey öğrenirdim sanırım. İlginenlere tavsiyemdir konularınız. Çalışmalarınızda başarılar dilerim kolay gelsin Semtex
     
    Katılım:
    6 Ekim 2016
    Mesaj:
    243
    Alınan Beğeniler:
    221

    Özel Mesaj
    "public partial class PowerfulSample : Form" partial tam olarak ne zaman kullaniliyor? Bu durumda partial kullanmasak ne farki olur?
     
  10. Semtex ER

    Katılım:
    6 Kasım 2016
    Mesaj:
    730
    Alınan Beğeniler:
    1,102

    Özel Mesaj
    partial class, yani kısmi sınıf tanımı sınıfın bazı parçalarını farklı yerlerde tanımladığımızda işe yarar..

    Örneğin, PowerfulSample formunun design kısmı ile kod kısmı farklı dosyalardadır...

    design kısmı da aslında koddur ve class şeklinde tanımlıdır...

    Bu iki dosyadakinin tek sınıfın parçaları olduğunu belirtmek için partial kullanırız...

    Derlenirken ikisi beraber derlenir...

    Güzel soru...

    referans da verelim...

    https://docs.microsoft.com/tr-tr/do...asses-and-structs/partial-classes-and-methods
     
  11. Semtex ER

    Katılım:
    6 Kasım 2016
    Mesaj:
    730
    Alınan Beğeniler:
    1,102

    Özel Mesaj
    Projeyi inceleme şansı bulanlar farketti mi bilmiyorum...

    İçinde bir .snk dosyası ile strong name olarak imzalanmış...


    Becerebilirsem bu imzayı iptal edip, tek projeye birleştireceğim...

    Kodu sadeleştirmeye devam ediyorum...

    Fikri olan her zaman paylaşabilir...
     
    Vecihi_33 ve DuhaYunus bunu beğendi.
  12. Semtex ER

    Katılım:
    6 Kasım 2016
    Mesaj:
    730
    Alınan Beğeniler:
    1,102

    Özel Mesaj
    Signature 'ı çıkardım...

    Tek projeye indirgedim...

    Ama tabi bir den çok form ve dosya içeren bir bileşen...

    İlk verdiğim işlevini yitirmeden, EditComponet adında kendi bileşenime evirdim...

    namespace de SemtexEditor

    Kodda bir iki derleme hatası yüzünden bazı kısımları çıkardım...

    Tabi binlerce satır adımlarken bazı şeyler gözden kaçabilir...

    Ama yine de kodu çalışır tutmayı başardım...

    Bir iki warning var ama ona vakit ayıramayacağım şu an...

    Editörün eli yüzü biraz düzeldi...

    Artık nasıl çalıştığını biliyorum...

    Bundan sonrası biraz makyaj...

    Arkasından, derleyici ile komut satırından haberleştireceğiz...

    Tabi öncesinde bir proje dosya formatı ayarlamamız gerekecek...

    Her aşamada açıklama yazarım, şu an ekstra bir şey yok...

    C# için gayet güzel bir örnek...

    Satırları inceleyenler, API çağrılarını da görebilirler...

    Yeri geldikçe kodu alıntılar buraya örnek atarım...

    Şu an tek proje haline getirilip, imza dosyası çıkarılmış halini vereyim...

    http://dosya.co/97jokh5kxmij/IDE_WORK.zip.html

    Derlemeden önce AV ile tarayın...

    [​IMG]


    Bu da hala çalışır olduğu örnek ekran görüntüsü...

    Varsa yaşadığınız aksaklıkları paylaşın inceleyelim...
     
    note ve DuhaYunus bunu beğendi.
    Katılım:
    6 Ekim 2016
    Mesaj:
    243
    Alınan Beğeniler:
    221

    Özel Mesaj
    Sorunsuz calisiyor.. peki partial'dan sonra sealed ve internal gördüm ve bunlari bi önceki linkte okudum ama "virtual" ne oluyor. Bunu ne zaman kullaniyoruz?
     
  13. Semtex ER

    Katılım:
    6 Kasım 2016
    Mesaj:
    730
    Alınan Beğeniler:
    1,102

    Özel Mesaj
    note, Vecihi_33 ve DuhaYunus bunu beğendi.