1. Giới thiệu:
Mình viết chương trình này trong thời gian rảnh rỗi nghỉ hè. Viết với mục đích giải trí và tìm hiểu là chính nên còn nhiều thiếu sót. Mình chia sẻ ở đây mong nhận được sự góp ý và cùng phát triển các chức năng mới.
Một số hình ảnh về game Cờ úp:
2.Cách kết nối 2 máy đánh cờ qua mạng LAN
B1: Chạy server.
B2: Chạy 2 client.
B3: Nhấn nút Multi - > xuất hiện cửa sổ Connect server, nhập các thông số:
-IP: địa chỉ IP máy chạy server.
-Port: chọn port để giao tiếp giữa các client.
-UserID: Tên client.
Nhấn nút connect. Nếu thành công sẽ xuất hiện cửa sổ Room chat.
B4: Chọn User Online - > nhấn nút Mời chơi.
B5: Trở lại cửa sổ game -> NewGame để bắt đầu chơi.
Lưu ý: Ai nhấn NewGame thì người đó được quyền đi trước.
Các button Save, Undo, Load chỉ sử dụng ở chế độ người đánh với máy(Mình chưa xong chức năng này) nên chưa sử dụng được.
Source code:
1. Client: tải về
2. Server: tải về
conrongchautien
Chia sẻ kiến thức lập trình
Chủ Nhật, 27 tháng 4, 2014
Thứ Hai, 10 tháng 2, 2014
[J2EE]Web chat JSP v2.0
Chủ Nhật, 1 tháng 12, 2013
Đăng kí tên miền miễn phí .tk
BƯỚC 1: Truy cập địa chỉ website: http://dot.tk
BƯỚC 2: Gõ tên miền mà bạn muốn đăng ký
BƯỚC 3:
* Chọn tên miền của bạn để vào phần quản lý tên miền
- Chọn: Custom DNS, - Thêm 2 bản ghi ns1.ttndns.com và ns2.ttndns.com
* Registration length - bạn chọn thời gian bạn muốn sử dụng tên miền .tk
* Type the characters you see in this picture - bạn điền chính xác các kí tự trong hình vào ô bên dưới
Sau đó bạn ấn nút SIGN UP
BƯỚC 4:
- Nếu bạn đã có các tài khoản của: Facebook, Google, Windows Live ID, Yahoo, Aol., flickr thì bạn có thể chọn 1 trong các tài khoản bạn có để đăng kí tên miền.
- Nếu bạn không có tài khoản trên, bạn ấn vào chữ "email address" và điền email mà bạn muốn đăng kí vào, sau đó ấn Next
BƯỚC 5: Điền thông tin sau đó ấn nút Create Account để hoàn tất việc đăng kí tên miền .tk
BƯƠC 6: Vào phần quản lý website của bạn ở Webmienphi.vn, vào menu "Thông tin, cài đặt tên miền", thêm tên miền bạn vừa trỏ, đợi vài tiếng tùy nhà mạng.
Nguồn: http://webmienphi.vn/
BƯỚC 2: Gõ tên miền mà bạn muốn đăng ký
BƯỚC 3:
* Chọn tên miền của bạn để vào phần quản lý tên miền
- Chọn: Custom DNS, - Thêm 2 bản ghi ns1.ttndns.com và ns2.ttndns.com
* Registration length - bạn chọn thời gian bạn muốn sử dụng tên miền .tk
* Type the characters you see in this picture - bạn điền chính xác các kí tự trong hình vào ô bên dưới
Sau đó bạn ấn nút SIGN UP
BƯỚC 4:
- Nếu bạn đã có các tài khoản của: Facebook, Google, Windows Live ID, Yahoo, Aol., flickr thì bạn có thể chọn 1 trong các tài khoản bạn có để đăng kí tên miền.
- Nếu bạn không có tài khoản trên, bạn ấn vào chữ "email address" và điền email mà bạn muốn đăng kí vào, sau đó ấn Next
BƯỚC 5: Điền thông tin sau đó ấn nút Create Account để hoàn tất việc đăng kí tên miền .tk
BƯƠC 6: Vào phần quản lý website của bạn ở Webmienphi.vn, vào menu "Thông tin, cài đặt tên miền", thêm tên miền bạn vừa trỏ, đợi vài tiếng tùy nhà mạng.
Chúc mừng bạn đã đăng kí và trỏ IP thành công với tên miền .tk
Các bạn có thể tham khảo video trỏ ip tại đây: http://webmienphi.vn/diendan/xemtopic/3748/huong-dan-tro-ip-tu-dot-tk-ve-wmp.html
Nguồn: http://webmienphi.vn/
Hướng dẫn Hosting JSP/Servlet
Hướng dẫn Hosting JSP/Servlet.
1. Vào trang http://s41.eatj.com/ màn hình như sau:
Ta tạo 1 Account miễn phí
Nhấn nút sign Up, check mail của bạn. Nhấn link confirm để kích hoạt tài khoản. Sau đó đăng nhập hệ thống
Sau khi đăng nhập thành công, chúng ta sẽ có màn hình điều khiển như sau:
OK! Bây giờ bạn có 1 domain tên http://vovanhai.s155.eatj.com/ và đã có host để upload trang JSP của bạn. Mở trình duyệt, gõ địa chỉ trên, bạn sẽ thấy cửa sổ Tomcat của bạn.
Nhấn link Tomcat Manager, bạn buộc phải nhập vào username, password
Bạn nhập username là admin, password là mật khẩu đăng nhập website bạn đã đăng ký:
Bạn có thể upload WAR file của bạn rồi đấy.
Nguồn: Võ Văn Hải's Blog
Ta tạo 1 Account miễn phí
Nhấn nút sign Up, check mail của bạn. Nhấn link confirm để kích hoạt tài khoản. Sau đó đăng nhập hệ thống
Sau khi đăng nhập thành công, chúng ta sẽ có màn hình điều khiển như sau:
Nhấn nút Create để tạo Tomcat của bạn. Nhấn link RESTART để việc thay đổi có hiệu lực. | |
Nhấn nút Change để đổi sang JDK 6 nếu bạn muốn | |
Bạn nhấn vào link bạn sẽ có 1 hướng dẫn tạo 1 trang mới từ wordpress. Nếu bạn muốn phát triển trang web của bạn, bỏ qua bước này. | |
Bạn có thể mở 1 trình quản lý FTP nào đó, chẳng hạn TotalCommander, hay CuteFTP,… với host, port hướng dẫn trên hình để việt upload được nhanh chóng hơn. Nếu không, bạn nhấn nút Browse.. để chọn file WAR cần upload, Nhấn nút Upload và đợi. |
Nhấn link Tomcat Manager, bạn buộc phải nhập vào username, password
Bạn nhập username là admin, password là mật khẩu đăng nhập website bạn đã đăng ký:
Bạn có thể upload WAR file của bạn rồi đấy.
Nguồn: Võ Văn Hải's Blog
Thứ Năm, 21 tháng 11, 2013
[C#]Chuyển ảnh màu sang ảnh nhị phân trong xử lý ảnh
Một số hình ảnh:
1. Image.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
namespace binary
{
class Image
{
Bitmap bitmap;
Int32[,] r, g, b;// lấy 3 màu từ bitmap
int maxR = 0, maxG = 0, maxB = 0;
int minR = 255, minG = 255, minB = 255;
int h, w;//lấy chiều rộng và chiều cao
public Image(Bitmap bm)
{
this.bitmap = bm;
h = bm.Height;
w = bm.Width;
r = new Int32[w, h];
g = new Int32[w, h];
b = new Int32[w, h];
setImage();
}
private void setImage()// lấy 3 màu từ bitmap ra 3 ma trận màu r,g,b
{
int x = 0;
int y = 0;
Bitmap bm1 = new Bitmap(bitmap);//copy bitmap sang bmd
Rectangle rec = new Rectangle(0, 0, bm1.Width, bm1.Height);//taọ 1 hcn có kích thước như bitmap
BitmapData bmd = bm1.LockBits(rec, ImageLockMode.ReadWrite, bm1.PixelFormat);
IntPtr p = bmd.Scan0;
Int32 bytes = Math.Abs(bmd.Stride) * bm1.Height;
Byte[] m = new Byte[bytes];//mảng các điểm ảnh bm
System.Runtime.InteropServices.Marshal.Copy(p, m, 0, bytes);
for (int i = 0; i < m.Length - 1; i += 4)
{
if (x == w)
{
x = 0;
y++;
}
if (y > h) break;
r[x, y] = Convert.ToInt16(m[i]);
g[x, y] = Convert.ToInt16(m[i + 1]);
b[x, y] = Convert.ToInt16(m[i + 2]);
maxR = Math.Max(maxR, r[x, y]);
maxG = Math.Max(maxG, g[x, y]);
maxB = Math.Max(maxB, b[x, y]);
minR = Math.Min(minR, r[x, y]);
minG = Math.Min(minG, g[x, y]);
minB = Math.Min(minB, b[x, y]);
x++;
}
System.Runtime.InteropServices.Marshal.Copy(m, 0, p, bytes);
bm1.UnlockBits(bmd);
}
public Bitmap getImage()
{
return bitmap;
}
public int[,] getRed()
{
return r;
}
public int[,] getGreen()
{
return g;
}
public int[,] getBlue()
{
return b;
}
public int getMaxR()
{
return maxR;
}
public int getMaxG()
{
return maxG;
}
public int getMaxB()
{
return maxB;
}
public int getMinR()
{
return minR;
}
public int getMinG()
{
return minG;
}
public int getMinB()
{
return minB;
}
}
}
2. ShowImage.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
namespace binary
{
class ShowImage
{
Int32[,] r, g, b;
Bitmap bitmap;
int w, h;
public ShowImage(Bitmap bm,int[,]r,int[,]g,int[,]b)
{
this.r = r;
this.g = g;
this.b = b;
this.bitmap = bm;
w = bm.Width;
h = bm.Height;
}
public Bitmap show()// đưa 3 màu r,g,b trở lji bitmap sau xử lí
{
int x = 0;
int y = 0;
Bitmap bm = new Bitmap(bitmap);
Rectangle rec = new Rectangle(0,0,bm.Width,bm.Height);
BitmapData bmd = bm.LockBits(rec,ImageLockMode.ReadWrite,bm.PixelFormat);
IntPtr p = bmd.Scan0;
Int32 bytes = Math.Abs(bmd.Stride) * bm.Height;
Byte[] m= new Byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(p,m,0,bytes);
for (int i = 0; i < m.Length - 1; i += 4)
{
if (x == w)
{
x = 0;
y++;
}
if (y == h) break;
m[i] = Convert.ToByte(r[x, y]);
m[i + 1] = Convert.ToByte(g[x, y]);
m[i + 2] = Convert.ToByte(b[x, y]);
x++;
}
System.Runtime.InteropServices.Marshal.Copy(m,0,p,bytes);
bm.UnlockBits(bmd);
return bm;
}
}
}
1. Image.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
namespace binary
{
class Image
{
Bitmap bitmap;
Int32[,] r, g, b;// lấy 3 màu từ bitmap
int maxR = 0, maxG = 0, maxB = 0;
int minR = 255, minG = 255, minB = 255;
int h, w;//lấy chiều rộng và chiều cao
public Image(Bitmap bm)
{
this.bitmap = bm;
h = bm.Height;
w = bm.Width;
r = new Int32[w, h];
g = new Int32[w, h];
b = new Int32[w, h];
setImage();
}
private void setImage()// lấy 3 màu từ bitmap ra 3 ma trận màu r,g,b
{
int x = 0;
int y = 0;
Bitmap bm1 = new Bitmap(bitmap);//copy bitmap sang bmd
Rectangle rec = new Rectangle(0, 0, bm1.Width, bm1.Height);//taọ 1 hcn có kích thước như bitmap
BitmapData bmd = bm1.LockBits(rec, ImageLockMode.ReadWrite, bm1.PixelFormat);
IntPtr p = bmd.Scan0;
Int32 bytes = Math.Abs(bmd.Stride) * bm1.Height;
Byte[] m = new Byte[bytes];//mảng các điểm ảnh bm
System.Runtime.InteropServices.Marshal.Copy(p, m, 0, bytes);
for (int i = 0; i < m.Length - 1; i += 4)
{
if (x == w)
{
x = 0;
y++;
}
if (y > h) break;
r[x, y] = Convert.ToInt16(m[i]);
g[x, y] = Convert.ToInt16(m[i + 1]);
b[x, y] = Convert.ToInt16(m[i + 2]);
maxR = Math.Max(maxR, r[x, y]);
maxG = Math.Max(maxG, g[x, y]);
maxB = Math.Max(maxB, b[x, y]);
minR = Math.Min(minR, r[x, y]);
minG = Math.Min(minG, g[x, y]);
minB = Math.Min(minB, b[x, y]);
x++;
}
System.Runtime.InteropServices.Marshal.Copy(m, 0, p, bytes);
bm1.UnlockBits(bmd);
}
public Bitmap getImage()
{
return bitmap;
}
public int[,] getRed()
{
return r;
}
public int[,] getGreen()
{
return g;
}
public int[,] getBlue()
{
return b;
}
public int getMaxR()
{
return maxR;
}
public int getMaxG()
{
return maxG;
}
public int getMaxB()
{
return maxB;
}
public int getMinR()
{
return minR;
}
public int getMinG()
{
return minG;
}
public int getMinB()
{
return minB;
}
}
}
2. ShowImage.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
namespace binary
{
class ShowImage
{
Int32[,] r, g, b;
Bitmap bitmap;
int w, h;
public ShowImage(Bitmap bm,int[,]r,int[,]g,int[,]b)
{
this.r = r;
this.g = g;
this.b = b;
this.bitmap = bm;
w = bm.Width;
h = bm.Height;
}
public Bitmap show()// đưa 3 màu r,g,b trở lji bitmap sau xử lí
{
int x = 0;
int y = 0;
Bitmap bm = new Bitmap(bitmap);
Rectangle rec = new Rectangle(0,0,bm.Width,bm.Height);
BitmapData bmd = bm.LockBits(rec,ImageLockMode.ReadWrite,bm.PixelFormat);
IntPtr p = bmd.Scan0;
Int32 bytes = Math.Abs(bmd.Stride) * bm.Height;
Byte[] m= new Byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(p,m,0,bytes);
for (int i = 0; i < m.Length - 1; i += 4)
{
if (x == w)
{
x = 0;
y++;
}
if (y == h) break;
m[i] = Convert.ToByte(r[x, y]);
m[i + 1] = Convert.ToByte(g[x, y]);
m[i + 2] = Convert.ToByte(b[x, y]);
x++;
}
System.Runtime.InteropServices.Marshal.Copy(m,0,p,bytes);
bm.UnlockBits(bmd);
return bm;
}
}
}
3. Tobinary.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace binary
{
class ToBinary
{
Image img;
int h, w;
Bitmap bm;
public ToBinary(Image img)
{
this.img = img;
this.bm = img.getImage();
h = bm.Height;
w = bm.Width;
}
public Bitmap toBinary(int X, int Y, int HEIGHT, int WIDTH, int band)
{
//tạo mảng màu của ảnh xử lý
int[,] r = img.getRed();
int[,] g = img.getGreen();
int[,] b = img.getBlue();
//chuyển màu vùng đã chọn
int x0, y0;
for (int y = 0; y < HEIGHT; y++)
for (int x = 0; x < WIDTH; x++)
{
x0 = x + X;
y0 = y + Y;
int gray = (img.getRed()[x0, y0] + img.getGreen()[x0, y0] + img.getBlue()[x0, y0]) / 3;
if (gray > band)
r[x0, y0] = g[x0, y0] = b[x0, y0] = 255;
else
r[x0, y0] = g[x0, y0] = b[x0, y0] = 0;
}
ShowImage s = new ShowImage(bm, r, g, b);
return s.show();
}
public int getHeigh()
{
return h;
}
public int getWidth()
{
return w;
}
}
}
4. Form1.cs
4. Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace binary
{
public partial class Form1 : Form
{
private Graphics graph;
private Image image;
private Bitmap bitmap;
private int X, Y, WIDTH, HEIGHT, band;
private bool isClick = false, flag = false, load = false;
private string filename;
public Form1()
{
InitializeComponent();
graph = pictureBox1.CreateGraphics();
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)//sự kiện nhấn chuột
{
if (!isClick && load)
{
X = e.X;
Y = e.Y;
HEIGHT = 0;
WIDTH = 0;
isClick = true;
flag = true;
textBox1.Text = "X: " + X + " - Y: " + Y + " - WIDTH: " + WIDTH + " - HEIGHT: " + HEIGHT;
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)//sự kiện thả chuột
{
if (isClick)
{
graph.DrawRectangle(Pens.GreenYellow, X, Y, WIDTH - 1, HEIGHT - 1);
isClick = false;
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)//sự kiện rê chuột
{
if (isClick)
{
if (e.X - X != WIDTH)
{
pictureBox1.Invalidate();
}
HEIGHT = e.Y - Y;
WIDTH = e.X - X;
HEIGHT = e.Y < pictureBox1.Height ? HEIGHT : pictureBox1.Height - Y;
WIDTH = e.X < pictureBox1.Width ? WIDTH : pictureBox1.Width - X;
textBox1.Text = "X: " + X + " - Y: " + Y + " - WIDTH: " + WIDTH + " - HEIGHT: " + HEIGHT;
graph.DrawRectangle(Pens.GreenYellow, X, Y, WIDTH - 1, HEIGHT - 1);
}
}
void load_image()
{
Bitmap bm = new Bitmap(filename);
image = new Image(bm);
int[,] r, g, b;
r = image.getRed();
g = image.getGreen();
b = image.getBlue();
ShowImage showImage = new ShowImage(bm, r, g, b);
pictureBox1.Image = showImage.show();
bitmap = showImage.show();
int maxRGB = Math.Max(image.getMaxB(), Math.Max(image.getMaxR(), image.getMaxG()));
int minRGB = Math.Min(image.getMinB(), Math.Min(image.getMinR(), image.getMinG()));
band = minRGB + (maxRGB - minRGB) / 2;
}
private void bt_load_Click(object sender, EventArgs e)//button laoad image
{
openFileDialog.Filter = "Bitmap files (*.bmp)|*.bmp|Jpeg files (*.jpg)|*.jpg|All valid files (*.bmp/*.jpg)|*.bmp/*.jpg";
openFileDialog.FilterIndex = 2;
openFileDialog.RestoreDirectory = true;//nhớ đường dẫn
openFileDialog.FileName = "";//chứa đường dẫn của load image
DialogResult kq = openFileDialog.ShowDialog();
if (kq == DialogResult.OK)
{
filename = openFileDialog.FileName;
pictureBox1.BackgroundImage = null;
load_image();
load = true;
}
}
private void bt_toBinary_Click(object sender, EventArgs e)//button ToGray
{
if (flag && load)
{
ToBinary img = new ToBinary(image);
int h = img.getHeigh();
int w = img.getWidth();
HEIGHT = Math.Min(HEIGHT, h - Y);
WIDTH = Math.Min(WIDTH, w - X);
Bitmap bm = img.toBinary(X, Y, HEIGHT, WIDTH, band);
image = new Image(bm);
pictureBox1.Image = bm;
graph.DrawRectangle(Pens.SteelBlue, X, Y, WIDTH, HEIGHT);
flag = false;
}
if (!load)
MessageBox.Show("Vui lòng mở ảnh!");
}
private void bt_reset_Click(object sender, EventArgs e)//button reset
{
load_image();
flag = false;
}
}
}
[J2EE]Web chat JSP
Một số hình ảnh:
Chương trình gồm các chức năng:
1. Chat Room: Khi đăng nhập, tất cả user có thể trò chuyện qua kênh này.
2. Chat Private: Kênh chat riêng giữa 2 user.
Chương trình sử dụng ajax để truyền tin theo thời gian thực.
Source code: tải về
Chương trình gồm các chức năng:
1. Chat Room: Khi đăng nhập, tất cả user có thể trò chuyện qua kênh này.
2. Chat Private: Kênh chat riêng giữa 2 user.
Chương trình sử dụng ajax để truyền tin theo thời gian thực.
Source code: tải về
Chủ Nhật, 29 tháng 9, 2013
[J2SE]Phóng to và thu nhỏ hình ảnh
public static Image zoomInImage(Image img) {
int[] rgbOutput = null; int width = 0, height = 0; int[] rgbInput = null; try { width = img.getWidth(); height = img.getHeight(); rgbInput = new int[width * height]; rgbOutput = new int[(width << 1) * (height << 1)]; img.getRGB(rgbInput, 0, width, 0, 0, width, height); int i, j, k; k = 0; for (i = 0; i < (height << 1); i += 2) { for (j = 0; j < (width << 1); j += 2) { if (j < 3) { // System.out.println(i * (width << 1) + j); // System.out.println((i + 1) * (width << 1) + j); // System.out.println(i * (width << 1) + j + 1); // System.out.println((i + 1) * (width << 1) + j + 1); } rgbOutput[i * (width << 1) + j] = rgbInput[k]; rgbOutput[(i + 1) * (width << 1) + j] = rgbInput[k]; rgbOutput[i * (width << 1) + j + 1] = rgbInput[k]; rgbOutput[(i + 1) * (width << 1) + j + 1] = rgbInput[k]; k++; } } return Image.createRGBImage(rgbOutput, width << 1, height << 1, true); } catch (OutOfMemoryError e) { // e.printStackTrace(); ImageAlbum.showAlert("Kích thước hình ảnh quá lớn!!!"); return img; } finally { rgbOutput = null; rgbInput = null; } } /*************************************************************************** * Zoom out */ public static Image zoomOutImage(Image img) { int[] rgbOutput = null; int width = 0, height = 0; int[] rgbInput = null; try { width = img.getWidth(); height = img.getHeight(); // System.out.println(width >> 1); // System.out.println(height >> 1); rgbInput = new int[width * height]; rgbOutput = new int[(width >> 1) * (height >> 1)]; img.getRGB(rgbInput, 0, width, 0, 0, width, height); int i, j, k, k1; k = 0; k1 = 0; // System.out.println(height); // System.out.println(width); for (i = 0; i < height; i++) { for (j = 0; j < width; j += 2) { if (i % 2 == 0) { if (k1 > width * height - 1 || k > (width >> 1) * (height >> 1) - 1) { // System.out.println("k=" + k); // System.out.println("k1=" + k1); break; } rgbOutput[k] = rgbInput[k1]; k++; k1 += 2; // System.out.println(k); // System.out.println(k1); } else { k1 += 2; } } } return Image.createRGBImage(rgbOutput, width >> 1, height >> 1, true); } catch (OutOfMemoryError e) { // e.printStackTrace(); ImageAlbum.showAlert("Kích thước hình ảnh quá lớn để thực hiện"); return img; } finally { rgbOutput = null; rgbInput = null; } }
Đăng ký:
Bài đăng (Atom)