How to flip/turn cards over
-
I have a solitaire game and got drag and drop to work. The thing is the random cards display every other card with a different backing to simulate the back of the card. I would like the player that when they move or click the backed card, it turns over to it's original card. Here's an example of my code: Note I set 001h as an example to test. Private Sub Image1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, _ X As Single, Y As Single) Image1(Index).Drag vbBeginDrag End Sub Private Sub Image1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, _ X As Single, Y As Single) If Image1(Index).Picture = LoadPicture("C:\Program1\Back.gif") Then Image1(Index).Picture = LoadPicture("C:\Program1\001h.gif") MsgBox ("ok") End If End Sub
-
I have a solitaire game and got drag and drop to work. The thing is the random cards display every other card with a different backing to simulate the back of the card. I would like the player that when they move or click the backed card, it turns over to it's original card. Here's an example of my code: Note I set 001h as an example to test. Private Sub Image1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, _ X As Single, Y As Single) Image1(Index).Drag vbBeginDrag End Sub Private Sub Image1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, _ X As Single, Y As Single) If Image1(Index).Picture = LoadPicture("C:\Program1\Back.gif") Then Image1(Index).Picture = LoadPicture("C:\Program1\001h.gif") MsgBox ("ok") End If End Sub
-
I have a solitaire game and got drag and drop to work. The thing is the random cards display every other card with a different backing to simulate the back of the card. I would like the player that when they move or click the backed card, it turns over to it's original card. Here's an example of my code: Note I set 001h as an example to test. Private Sub Image1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, _ X As Single, Y As Single) Image1(Index).Drag vbBeginDrag End Sub Private Sub Image1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, _ X As Single, Y As Single) If Image1(Index).Picture = LoadPicture("C:\Program1\Back.gif") Then Image1(Index).Picture = LoadPicture("C:\Program1\001h.gif") MsgBox ("ok") End If End Sub
In a card game I would keep all cards in memory, rather than reading them from disk every time. :)
Luc Pattyn [Forum Guidelines] [My Articles]
DISCLAIMER: this message may have been modified by others; it may no longer reflect what I intended, and may contain bad advice; use at your own risk and with extreme care.
-
I want to know how to flip the cards with backing.gif over to the original card in the random pile. I have one face up, the next one face down, etc.
-
I want to know how to flip the cards with backing.gif over to the original card in the random pile. I have one face up, the next one face down, etc.
You'd have to draw each frame the animation yourself. That's all it is. A series of still images that give the illusion of flipping a card.
A guide to posting questions on CodeProject[^]
Dave Kreskowiak Microsoft MVP Visual Developer - Visual Basic
2006, 2007, 2008 -
Okay. So wouldn't that mean you have a card with the back image and when you want it to flip you show the front image?
-
You'd have to draw each frame the animation yourself. That's all it is. A series of still images that give the illusion of flipping a card.
A guide to posting questions on CodeProject[^]
Dave Kreskowiak Microsoft MVP Visual Developer - Visual Basic
2006, 2007, 2008Trying to understand completely what you are saying: Basically, I have random cards of all suits on the left of the form. Each other card has a back.gif to show the back of the card. Each card is in an array of 52 cards. When a user clicks the backing card, I want the let's say queen of hearts to show up, hence image1(12), that picture; before they drag the card. I tried this with If image1(index).picture = loadpicture("C:\backing.gif") Then image1(12).picture = loadpicture("C:\queenhearts.gif") and so forth; I would write all the images and set them to the correct gifs. At runtime, nothing worked when I clicked those cards.... I even thought of trying image1_click(Index As Integer), but that didn't work either. Any ideas on how to within the same routine, to turn the cards or set them to the proper gif when the user clicks on them? Seems so simple, but I'm still confused.
-
In a card game I would keep all cards in memory, rather than reading them from disk every time. :)
Luc Pattyn [Forum Guidelines] [My Articles]
DISCLAIMER: this message may have been modified by others; it may no longer reflect what I intended, and may contain bad advice; use at your own risk and with extreme care.
-
Start a collection of images (array, List, Dictionary, ...) and load it using Image.FromStream at the start of the app. :)
Luc Pattyn [Forum Guidelines] [My Articles]
DISCLAIMER: this message may have been modified by others; it may no longer reflect what I intended, and may contain bad advice; use at your own risk and with extreme care.
-
Start a collection of images (array, List, Dictionary, ...) and load it using Image.FromStream at the start of the app. :)
Luc Pattyn [Forum Guidelines] [My Articles]
DISCLAIMER: this message may have been modified by others; it may no longer reflect what I intended, and may contain bad advice; use at your own risk and with extreme care.
-
I already have an array of images in design view; it would be redundant to load them, wouldn't it?
I don't know as I am not familiar with your entire code base. However it does not match well with the code shown in your original post. :)
Luc Pattyn [Forum Guidelines] [My Articles]
DISCLAIMER: this message may have been modified by others; it may no longer reflect what I intended, and may contain bad advice; use at your own risk and with extreme care.
-
I don't know as I am not familiar with your entire code base. However it does not match well with the code shown in your original post. :)
Luc Pattyn [Forum Guidelines] [My Articles]
DISCLAIMER: this message may have been modified by others; it may no longer reflect what I intended, and may contain bad advice; use at your own risk and with extreme care.
You're right; I changed some of the code. I'm thinking that on mousedown event, somewhere I would flip the backing cards over when the user presses the mouse down on the card. How would I do that? Here it is: Option Explicit Public Sub FormLoad() End Sub Private Sub Exit_Click() MsgBox ("Thank you for playing. Good Bye.") End End Sub Private Sub Start_Click() Image2.Visible = False Dim Selected As Boolean Dim arrDeck(52) Dim Cardcount As Integer Dim Counter As Integer Dim Index As Integer Do While Cardcount <= 52 arrDeck(Cardcount) = Cardcount Cardcount = Cardcount + 1 Loop Dim swap As Integer Dim posn1 As Integer Dim posn2 As Integer Randomize For swap = 0 To 50 ' Get two random positions posn1 = Int(52 * Rnd) posn2 = Int(52 * Rnd) ' Swap pictures at these positions If (posn1 <> posn2) Then KingH(0).Picture = Image1(posn1).Picture KingH(0).Tag = Image1(posn1).Tag Image1(posn1).Picture = Image1(posn2).Picture Image1(posn1).Tag = Image1(posn2).Tag Image1(posn2).Picture = KingH(0).Picture Image1(posn2).Tag = KingH(0).Tag End If Next swap Start_Game.Refresh For Counter = 0 To 50 &nbs
-
You're right; I changed some of the code. I'm thinking that on mousedown event, somewhere I would flip the backing cards over when the user presses the mouse down on the card. How would I do that? Here it is: Option Explicit Public Sub FormLoad() End Sub Private Sub Exit_Click() MsgBox ("Thank you for playing. Good Bye.") End End Sub Private Sub Start_Click() Image2.Visible = False Dim Selected As Boolean Dim arrDeck(52) Dim Cardcount As Integer Dim Counter As Integer Dim Index As Integer Do While Cardcount <= 52 arrDeck(Cardcount) = Cardcount Cardcount = Cardcount + 1 Loop Dim swap As Integer Dim posn1 As Integer Dim posn2 As Integer Randomize For swap = 0 To 50 ' Get two random positions posn1 = Int(52 * Rnd) posn2 = Int(52 * Rnd) ' Swap pictures at these positions If (posn1 <> posn2) Then KingH(0).Picture = Image1(posn1).Picture KingH(0).Tag = Image1(posn1).Tag Image1(posn1).Picture = Image1(posn2).Picture Image1(posn1).Tag = Image1(posn2).Tag Image1(posn2).Picture = KingH(0).Picture Image1(posn2).Tag = KingH(0).Tag End If Next swap Start_Game.Refresh For Counter = 0 To 50 &nbs
Hi, I have several comments: 1.
For Counter = 0 To 50
Counter = Counter + 1
Image1(Counter).Picture = LoadPicture("C:\Program1\Back.gif")
Next Counteryou are incrementing Counter twice: once explicitly, once implicitly in the For statement. If that is what you want, you should adapt the for statement and add "Step 2" for clarity. And you are loading that image from file over and over. 2. I would keep the state of the game in my own data structures, independent of the GUI; I might choose to have an integer array storing the card numbers (0-51), a bool array storing a front/back flag, etc. Then perform the game rules on that data, and when something changes update the GUI. So e.g. the initial card shuffle would occur in data arrays, not in PictureBoxes. 3. I would keep all the card images in a single Image array, and load that once at app start. You seem to get all cards loaded in the PictureBoxes through the Designer (that is a lot of unnecessary work, such things are much easier in code). :)
Luc Pattyn [Forum Guidelines] [My Articles]
DISCLAIMER: this message may have been modified by others; it may no longer reflect what I intended, and may contain bad advice; use at your own risk and with extreme care.
-
Hi, I have several comments: 1.
For Counter = 0 To 50
Counter = Counter + 1
Image1(Counter).Picture = LoadPicture("C:\Program1\Back.gif")
Next Counteryou are incrementing Counter twice: once explicitly, once implicitly in the For statement. If that is what you want, you should adapt the for statement and add "Step 2" for clarity. And you are loading that image from file over and over. 2. I would keep the state of the game in my own data structures, independent of the GUI; I might choose to have an integer array storing the card numbers (0-51), a bool array storing a front/back flag, etc. Then perform the game rules on that data, and when something changes update the GUI. So e.g. the initial card shuffle would occur in data arrays, not in PictureBoxes. 3. I would keep all the card images in a single Image array, and load that once at app start. You seem to get all cards loaded in the PictureBoxes through the Designer (that is a lot of unnecessary work, such things are much easier in code). :)
Luc Pattyn [Forum Guidelines] [My Articles]
DISCLAIMER: this message may have been modified by others; it may no longer reflect what I intended, and may contain bad advice; use at your own risk and with extreme care.
Thanks for the expert comments: Questions: 1. I would like to keep what I have done in design view instead of writing more code to load those pics. I have Dimmed an array at the beginning to create the card deck; I cannot redundantly load the image array twice; the compiler won't let me; says it's already there. 2. In response to your #1, I wanted every other card to have the back.gif, so in essence it is flipped over. Am I actually loading the same image twice with my code? I thought using the For statement would at least start the counting from 0-51, but I wanted the counter to change the back of every other card. Your comment about boolean flags makes sense. I'm not asking you to write my code, but this isn't for a school assignment; it is a birthday present to my Mom, so help on boolean code would be very much appreciated. Hence, perhaps I can have a face up as a boolean, and a face down. How and where would I implement that; at loadform? Much appreciation in advance.
-
Thanks for the expert comments: Questions: 1. I would like to keep what I have done in design view instead of writing more code to load those pics. I have Dimmed an array at the beginning to create the card deck; I cannot redundantly load the image array twice; the compiler won't let me; says it's already there. 2. In response to your #1, I wanted every other card to have the back.gif, so in essence it is flipped over. Am I actually loading the same image twice with my code? I thought using the For statement would at least start the counting from 0-51, but I wanted the counter to change the back of every other card. Your comment about boolean flags makes sense. I'm not asking you to write my code, but this isn't for a school assignment; it is a birthday present to my Mom, so help on boolean code would be very much appreciated. Hence, perhaps I can have a face up as a boolean, and a face down. How and where would I implement that; at loadform? Much appreciation in advance.
I don't understand your game nor your code, however I am convinced I would program card games quite differently, as I explained. Obviously you are entitled to your way of doing it, I won't be able to help you much, I wish you success. :)
Luc Pattyn [Forum Guidelines] [My Articles]
DISCLAIMER: this message may have been modified by others; it may no longer reflect what I intended, and may contain bad advice; use at your own risk and with extreme care.
-
I don't understand your game nor your code, however I am convinced I would program card games quite differently, as I explained. Obviously you are entitled to your way of doing it, I won't be able to help you much, I wish you success. :)
Luc Pattyn [Forum Guidelines] [My Articles]
DISCLAIMER: this message may have been modified by others; it may no longer reflect what I intended, and may contain bad advice; use at your own risk and with extreme care.