Gå til innhold

Anbefalte innlegg

  • 3 uker senere...
Videoannonse
Annonse

Laget et program som pinger alle på nettverket (altså mellom 192.168.0.1 -> 192.168.0.255)

Den bruker mange threads, så den er ferdig på rundt 10 sekunder.

 

using System;
using System.Net;
using System.Net.Sockets;
using System.Net.NetworkInformation;
using System.Threading;

namespace PingNet
{
static class PingNet
{
	private static System.Threading.Thread[] m_threads;

	private volatile static int counter;		

	static void Main(string[] args)
	{
		m_threads = new Thread[255]; // Exclude address 0

		counter = 0;

		for (int i = 0; i < m_threads.Length; i++)
		{
			m_threads[i] = new Thread(new ParameterizedThreadStart(new ParameterizedThreadStart(PingAddress)));
			m_threads[i].Start(new IPAddress(new byte[] { 192, 168, 0, (byte)(i + 1) }));
		}

		while (counter < m_threads.Length)
		{
			Thread.Sleep(100);
		}
	}

	static void PingAddress(object parameter)
	{
		IPAddress address = parameter as IPAddress;
		Ping ping = new Ping();


		PingReply reply = ping.Send(address, 10000);

		string hostname;

		if (reply.Status == IPStatus.Success)
		{

			try
			{
				hostname = "host " + Dns.GetHostEntry(reply.Address).HostName;
			}
			catch (SocketException)
			{
				hostname = "unknown host";
			}

			Console.WriteLine("Found " + hostname + " at " + reply.Address.ToString());
		}
		else
		{
			Console.WriteLine("Address " + address.ToString() + " " + reply.Status.ToString());
		}
		counter++;
	}
}
}

 

Brukte dette til å sjekke alle enheter som svarte på nettverket, fordi jeg hadde to maskiner som dukket opp i Windows Network.

Endret av GeirGrusom
Lenke til kommentar
  • 2 uker senere...

Vel, da har jeg laget noe som sikker kanskje er nyttig for noen

 

En teksteditor med støtte for syntax highlighting.

 

Mye mangler enda, blant annet undo/redo, men det meste som en vanlig teksteditor støtter er støttet av denne kontrollen.

 

Måten den fungerer på er at teksten deles opp i linjer, og hver linje har en ekstra array som forklarer hvor teksten sin font eller farge skal endres. Områder som ikke er beskrevet av dette arrayet vil skrives som svart.

 

En bruker kontrollen ved å enkelt nok plassere den på en form, og deretter ken en enten bruke RegularExpression feltet og skrive inn en regular expression som skal brukes for å matche syntaksen.

Jeg buker

/\\*(.*)\\*/|(//.*)|\"(.*)\"|'.'|[a-zA-Z_]([a-zA-Z0-9_]*)|0x[0-9A-Fa-f]+|([0-9]+\\.e-?[0-9]+)|0[0-7]+|[0-9]+

 

Til min D IDE som kanskje er noe en kan jobbe utifra dersom en skal bruke det til et annet C-ish språk

 

En bruker Keywords arrayet for å si hvilke ord som skal fargelegges.

 

Foreløpig har jeg ikke satt inn noen funksjon for å velge fargen selv, så dette må hardkodes nå.

 

BuiltIn er funksjoner som skal fargelegges med en annen farge (jeg bruker det til spesielle ting som __FILE__ e.l. i D)

 

En kan bruke LineAttributes for å sette forskjellige ikoner foran hver linje. Dette bruker jeg for at en debugger skal sette inn for eksempel breakpoint eller feilmelding og hvor programmet er kommet hvis en trykker på Ctrl+Break.

 

En kan også få kontrollen til å understreke deler av teksten, for eksempel ved syntaksfeil e.l.

 

Akkurat nå er det ganske enkelt kun en linje, og ikke sånn fin bølge, men det kommer.

 

Dll-fila må kompileres før den kan brukes.

 

edit: for å få denne til å fungere med andre språk, kreves det litt endring av kildekoden på syntax highlighting som dere kan se. Jeg har ikke funnet ut om det går an å gruppere ting i regex, så hvis noen vet hvordan hadde det vært fint :)

CodeEditor.zip

Endret av GeirGrusom
Lenke til kommentar
  • 2 uker senere...
Ingen som har vært borti dette i regex? hadde vært fint hvis en kunne sette i regex hva de forskjellige delene gjorde for noe...

 

Du må forklare litt bedre hva du mener med gruppere. Du har muligheten til å navngi grupper ved å gjøre slik:

 

Regex reg = new Regex("(?<first>abc)(?<second>def)");
Match match = reg.Match("abcdef");
Console.WriteLine(string.Format("{0}, {1}", match.Groups["first"].Value, match.Groups["second"].Value));

 

Vil da skrive ut: abc, def.

 

Tror kanskje det ikke var dette du var ute etter?

Lenke til kommentar

Jeg er ute etter at visse deler (for eksempel /* og */) av regexen skal kunne forklares direkte i regexen hva de er til. sånn det er nå, så sjekker programmet hva de forskjellige resultatene er til for å fargelegge koden (for eksempel Value.StartsWith("/*") e.l.

 

Det hadde vært fint om jeg kan for eskempel skrive

 

(<comment>//.*) så vil koden finne ut at denne matchen er en kommentar.

Nå har det seg slik at jeg ikke får testet dette, da utviklingsmaskinen min har gått i vasken... :( men det ser ihvertfall logisk ut :) så takker

Lenke til kommentar
  • 1 måned senere...

Hei

 

Jeg lager for tiden en slags map editor, foreløpig har jeg bare konsentrert meg om terreng.

 

Det jeg er interessert i er å vite hva slags ytelse dere får, siden denne bruker C# grafikkmotoren min (glorg)

 

Andre som har testet det har fått problemer med at noe går kjempesakte.

Fortelle gjerne hvilket OS dere har, og hva slags hardware.

 

Og selvsagt feilmeldinger hvis dere får noen.

 

Programmet er ganske enkelt i bruk, midterste museknapp roterer rundt brettet, scroll med hjulet zoomer inn og ut, begge museknappene flytter kameraet rundt. Venstre museknapp utfører valgt kommando(opphøy terreng eller myk ut) høyre museknapp senker terrenget.

MapEditor.zip

Lenke til kommentar
Hei

 

Jeg lager for tiden en slags map editor, foreløpig har jeg bare konsentrert meg om terreng.

 

Det jeg er interessert i er å vite hva slags ytelse dere får, siden denne bruker C# grafikkmotoren min (glorg)

 

Andre som har testet det har fått problemer med at noe går kjempesakte.

Fortelle gjerne hvilket OS dere har, og hva slags hardware.

 

Og selvsagt feilmeldinger hvis dere får noen.

 

Programmet er ganske enkelt i bruk, midterste museknapp roterer rundt brettet, scroll med hjulet zoomer inn og ut, begge museknappene flytter kameraet rundt. Venstre museknapp utfører valgt kommando(opphøy terreng eller myk ut) høyre museknapp senker terrenget.

 

 

Fin sak. Fungerer bra hos meg. Ingen delay. Vet ikke om brush setup skal fungerere med det gjør det ihvertfall ikke; det skjer ingenting når jeg klikker på den.

 

Maskinen:

XP SP 2.

2 GB RAM

2,40 GHZ CORE 2.

NVIDIA Quadro FX560.

 

 

 

Hva slags kunnskaper trenger man får å lage noe sånt? Kan du peke på noe litteratur?

Fikk lyst til å prøve på noe "visualiseringsgreier" jeg har tenkt litt på.

Lenke til kommentar

Det mest selvsagte er kunnskap om grunnleggende 3D grafikk. Jeg kan dessverre ikke anbefale noe litteratur, da jeg kun har brukt tutorials, wikipedia, msdn selv.

Du bør begynne med å lese om matriser og vektorer i 3D grafikk, deretter er det egentlig bare å sette seg ned å prøve seg litt frem og lese tutorials. GameDev.net er et bra utganspunkt.

Lenke til kommentar
  • 2 måneder senere...

Etter at det var litt snakk om kalkulaturer her på C#-forumet, fikk jeg lyst til å prøve å lage min egen matteparser. Foreløpig er funksjonaliteten litt begrenset, men det viktigste er på plass, hvertfall mer eller mindre.

 

blant funksjonene er alle standard operasjoner (+, -, *, /, %, ^, &, |, !), en del innebygde funksjoner samt støtte for definering av egne konstanter, variabler og funksjoner. har også laget enkel graf-tegning.

 

hvordan det funker:

for å regne ut vanlige uttrykk, er det bare å skrive i input-feltet nederst. F.eks. 2E^(cos(pi/6))%1/pi.

definere variabler: bare skrive [variabelnavn] = [verdi].

definere konstanter (serialiseres til fil): define [navn] = [verdi]

definere funksjoner (serialiseres også): for eksempel f(a,b)=a^2-b^2

 

har også såvidt lagt inn støtte for vektorer som foreløpig er på alpha-stadie og to funksjoner for å illustrere bruken av disse (angle og length).

for eksempel "angle([1,0,0],[0,1,0])" returnerer pi/2. operator for kryssprodukt av vektorer (foreløpig kun tredimensjonale vektorer) er **. for eksempel vil (10/2)*[1,0,0]**[0,1,0] gi [0,0,5].

 

Oppdaterer denne posten når det blir ferdig.

 

hmm, .rar ikke tillatt?

math.zip

Endret av hockey500
Lenke til kommentar
  • 4 uker senere...

Ser grei ut den, relativt enkelt å hække, men gjør jo en enkel jobb. Du kan jo ta en titt på denne koden som jeg skrev for et år eller to siden. Vil nok være hakket vanskeligere å knekke fordi den krever en nøkkel. Det brukes et par konstanter der men det overlater jeg deg til å skjønne selv ;-)

 

 

	public static class EncryptionClass
{

	#region --< private Data >--

	#endregion

	#region --< Public methods >--

	public static string Encrypt(string pPassedString, string pPassword)
	{
		return Encryption(pPassedString, pPassword, Constants.Security.Crypto.CryptoType.Encrypt);
	}

	public static string Decrypt(string pPassedString, string pPassword)
	{
		return Encryption(pPassedString, pPassword, Constants.Security.Crypto.CryptoType.Decrypt);
	}

	#endregion

	#region --< Private Methods >--

	private static string Encryption(string pPassedString, string pPassword, Constants.Security.Crypto.CryptoType pDirection)
	{
		int TestLen;
		int PassLen;

		int Checksum = 0;
		string WorkString = "";

		switch (pDirection)
		{
			case Constants.Security.Crypto.CryptoType.Encrypt:
				Checksum = GetChecksum(pPassedString);
				WorkString = pPassedString;
				break;
			case Constants.Security.Crypto.CryptoType.Decrypt:
				Checksum = int.Parse(pPassedString.Substring((int)Constants.Security.Crypto.CRCPosition, (int)Constants.Security.Crypto.CRCLength));
				// Must remove the Checksum from the Encryption string
				WorkString =
					pPassedString.Substring(0, (int)Constants.Security.Crypto.CRCPosition) +
					pPassedString.Substring((int)Constants.Security.Crypto.CRCPosition + (int)Constants.Security.Crypto.CRCLength);
				break;
		}
		//pPassword = MaskPassword(pPassword);
		TestLen = WorkString.Length;
		PassLen = pPassword.Length;
		int i = 0;
		char[] tmpWorkString = WorkString.ToCharArray();

		for (int o = 0; o < TestLen; o++)
		{
			byte num1 = (byte)tmpWorkString[o];
			byte num2 = (byte)pPassword[i];
			byte xored = (byte)(num1 ^ num2);
			char Temp = (char)xored;
			tmpWorkString[o] = Temp;
			i++;
			if (i >= PassLen)
				i = 0;
		}
		WorkString = new string(tmpWorkString);

		if (pDirection == Constants.Security.Crypto.CryptoType.Encrypt)
			WorkString =
				WorkString.Substring(0, (int)Constants.Security.Crypto.CRCPosition) +
				Tools.StringTools.PadValue(Checksum, 2, '0') +
				WorkString.Substring((int)Constants.Security.Crypto.CRCPosition);
		else
			if (Checksum != GetChecksum(WorkString))
			{
				WorkString = Constants.Security.Crypto.DecryptError;
			}


		return WorkString;
	}

	private static int GetChecksum(string pPassedString)
	{
		int Checksum = 0;
		for (int i = 0; i < pPassedString.Length; i++)
			Checksum += (int)pPassedString[i];

		if (Checksum >= Math.Pow(10, (double)Constants.Security.Crypto.CRCLength))
			do
			{
				pPassedString = Checksum.ToString();
				Checksum = 0;
				for (int i = 0; i < pPassedString.Length; i++ )
					Checksum += int.Parse(pPassedString[i].ToString());

			} while (Checksum >= Math.Pow(10, Constants.Security.Crypto.CRCLength));

		return Checksum;
	}

	#endregion

}

 

 

 

edit: Ser at jeg bruker en Tools klasse der også, men det er bare for å få til padding. Det kan dere fikse selv ;-)

Endret av HDSoftware
Lenke til kommentar

Laget et lite program for å lese og skrive .ini filer med som jeg tenkte kanskje noen andre kunne ha bruk for.

 

Det som kan være greit med den, er at den bevarer alle kommentarer og slikt, fordi den kun skriver over alle feltene, og ikke hele fila.

 

Den er temmelig enkel i bruk, dersom en referer til en header som ikke finnes i den originale fila, så blir den laget, samme med verdiene.

 

Eksempel på bruk:

IniFile ini = new IniFile("config.ini");
ini["General"]["ShowFullPaths"] = "true";

 

Filen lagres når Save blir kalt. Filen forblir låst så lenge objektet eksisterer eller hvis Dispose blir kalt.

 

Eksplisitte kommentarer skrives ved at linjen starter med ;

 

Det finnes ingen syntaks sjekking, så dersom en linje ikke lar seg parse, blir den bare ignorert.

 

;ShowFullPaths=true

Vil bli ignorert av parseren, men dette gjelder KUN når ; står på begynnelsen av linjen, alle kommentarer må enten stå over eller under hver linje.

"Hei jeg heter brødrister"

Blir også ignorert.

IniFile.zip

Lenke til kommentar

Laget tidligere i uken en klasse som skal gjøre det enklere å håndtere sprites,og tenkte jeg skulle legge den her for å få kommentarer på den. Koden er min, i motsetning til ideen som jeg fikk av en bruker på et annet forum.

class Spritesheet
   {
       #region Variables
       private Bitmap sheet;
       private Dictionary<string, Rectangle> sprites = new Dictionary<string, Rectangle>();
       private string filepath;
       #endregion
       #region Constructor
       public Spritesheet(string path)
       {
           try
           {
               sheet = new Bitmap(path);
               filepath = path;
           }
           catch
           { }
       }
       #endregion
       #region Properties
       public string Filepath { get { return filepath; } }
       public Bitmap Sheet { get { return sheet; } set { sheet = value; } }
       public Dictionary<string, Rectangle> Sprites { get { return sprites; } set { sprites = value; } }
       #endregion
       #region Methods
       /// <summary>
       /// Saves the current spritesheet data, including the spritesheet image.
       /// </summary>
       /// <param name="path">The path to save the spritesheet to, including the image name.(+1 Overload)</param>
       /// <returns>Returns true if successfull, otherwise false.</returns>
       public bool Save(string path)
       {
           try
           {
               StringBuilder dataFile = new StringBuilder();
               foreach (string key in sprites.Keys)
                   dataFile.AppendLine("!" + key + "!" + sprites[key].ToString());

               using (TextWriter fileWriter = new StreamWriter(path + ".txt"))
                   fileWriter.Write(dataFile);
               sheet.Save(path);
           }
           catch { return false; }
           return true;
       }
       /// <summary>
       ///  Saves the current spritesheet data. (+1 Overload)
       /// </summary>
       /// <returns>Returns true if successfull, otherwise false.</returns>
       public bool Save()
       {
           StringBuilder dataFile = new StringBuilder();
           foreach (string key in sprites.Keys)
               dataFile.AppendLine("!" + key + "!"+sprites[key].ToString());

           using (TextWriter fileWriter = new StreamWriter(filepath + ".txt"))
               fileWriter.Write(dataFile);

           return true;
       }
       /// <summary>
       /// Loads the spritesheet data that belongs to the image.
       /// </summary>
       /// <returns>Returns true if the data was loaded successfully, otherwise false.</returns>
       public bool Load()
       {
           if (File.Exists(filepath + ".txt"))
           {
               using (TextReader fileReader = new StreamReader(filepath + ".txt"))
               {
                   try
                   {
                       while (fileReader.Peek() >= 0)
                       {
                           string line = fileReader.ReadLine();
                           MatchCollection valueMatches = Regex.Matches(line, @"(?<==)\d+");
                           int x = int.Parse(valueMatches[0].Value);
                           int y = int.Parse(valueMatches[1].Value);
                           int width = int.Parse(valueMatches[2].Value);
                           int height = int.Parse(valueMatches[3].Value);
                           sprites[Regex.Match(line, @"(?<=!)\w+(?=!)").Value] = new Rectangle(x, y, width, height);
                       }
                   }
                   catch { return false; }
               }
               return true;
           }
           else
               return false;
       }
       #endregion
   }

Det denne klassen skal hjelpe med, er å gjøre det enklere å referere til en enkelt sprite på en spritesheet, slik at du ikke behøver å tulle med koordinater når du koder. Istedet gjør du slik:

Spritesheet spritesheet = new Spritesheet("C:\MinFilvei\Eksempel.jpg");
spritesheet.Load();
Bitmap angrepsSprite1 = new Bitmap(spritesheet.Sprites["Angrep1"].Width, spritesheet.Sprites["Angrep1"].Height);
Graphics spriteGraphics = graphics.FromImage(angrepsSprite1);
spriteGraphics.DrawImage(spritesheet.Sheet, new Rectangle(0,0,angrepsSprite1.Width,angrepsSprite1.Height),spritesheet.Sprites["Angrep1"],GraphicsUnit.Pixel);

Dette forutsetter selvsagt at du har laget en spritesheet fil med "Angrep1" definert. Jeg legger ved et program som gjør dette enkelt, kun ved å bruke denne klassen(Gjør den om fra .txt til .exe før du kjører den). Håper på kommentarer på dette =).

Spritesheet_management.txt

Endret av Velena
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...